amarao (amarao_san) wrote,
amarao
amarao_san

name_split

(часть gattai v0.2 - жж как один из бэкапов).



License: GNU GPL v2 or higher.

def iscrc(line):
	
	if re.match("\[[A-Fa-f0-9]{8}\]",line):
		return True
	else:
		return False
	
def isquality(line):
	text_pattern=("H264","H.264","X264","XVID","BLU","AC3","DIVX","AAC","VORBIS","WMV","HQ","LQ", "DVD","HD","SD","FULLHD")
	test=line.upper()
	if re.search("(\d{3,4}X\d{3,4})|(\d{3,4}P)",test):
		return True
	for text in text_pattern:
		if text in test:
			return True
	return False
	
		
def name_split(name):
	last_dot=name.rfind(".")
	extension=name[last_dot:]
	if last_dot!=-1:
		splited_name=re.split("(\(.+?\))|(\[.+?\])",name[:last_dot])
	else:
		splited_name=re.split("(\(.+?\))|(\[.+?\])",name)
	chain=[]
	first_braces=True
	for obj in splited_name:
		if obj: 
			obj=obj.strip()
		if not obj:#skip spacers & empty
			continue
		if len(obj)>1 and ( obj[0] in "[("):
			content=obj[1:-1]
			if iscrc(obj):
				chain.append({"type":"CRC","value":content})
				first_braces=False
			elif first_braces: #first braces in name - fansubber name
				chain.append({"type":"subber","value":content})
				first_braces=False
			elif isquality(obj[1:-1]): #looks like quality
				chain.append({"type":"quality","value":content})
			else: #strange text in braces
				chain.append({"type":"braces", "value":obj})
		else:  #inner name processing
			ep_pass=False
			for inner in re.split("(.+?)(\d+\-?\d*\s?v?\d?)(\D*)$",obj):
			# shall snatch foo 2, foo 2v2, foo 3-4, foo 014-106v2.
				if inner: 
					inner=inner.strip()
				if not inner: 
					continue
				if re.match("\d+",inner):
					chain.append({"type":"episode","value":inner})
					ep_pass=True
				else:	
					clear=re.sub("[\t\s\~\-\_\.]+"," ",inner)
					if clear:
						if not ep_pass:
							chain.append({"type":"title","value":clear})
						else:
							chain.append({"type":"text","value":clear})
					
	if extension:
		chain.append({"type":"ext","value":extension[1:]})

	return chain

Subscribe

  • systemd-networkd, netlink и arp флуд

    Нереально странный баг пофикшен с помощью eBPF затычки. Для меня большой неожиданностью является реакция на него.…

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments