OSDN Git Service

happy new year! 2011
[rec10/rec10-git.git] / rec10 / trunk / src / guess.py
index e2d710f..cad73e1 100644 (file)
@@ -1,9 +1,10 @@
 #!/usr/bin/python
 # coding: UTF-8
 # Rec10 TS Recording Tools
-# Copyright (C) 2009-2010 Yukikaze
+# Copyright (C) 2009-2011 Yukikaze
 
 import os
+import os.path
 import re
 import time
 import os
@@ -11,34 +12,45 @@ import datetime
 import n_gram
 import recdblist
 import zenhan
+import auto_move
 
-def detName(title,path):
-    tt=detNameType(title, path)
-    if tt['type']=="C"or tt['type']=="D":
-        tt['num']=detNum(tt['title'],tt['folder'])
-def detNum(title,movepath):
+def detSeriesNum(execpath):
+    files=os.listdir(execpath)
+    ss={}
+    for file in files:
+        ftitle=os.path.splitext(file)
+        fname=ftitle[0]
+        fname=zenhan.toHankaku(unicode(fname,"utf-8"))
+        nt=detNameType(fname, execpath)
+        st=nt['title']
+        if not ss.has_key(st):
+            ss[st]={}
+        ss[st][nt['num']]=ftitle
+        print ss
+    return ss
+def detDeltaNum(title,movepath):
     """
-        #
+        #番組の話数を推測する。
     """
     files=os.listdir(movepath)
     ff=[]
     maxnum=0
     for file in files:
-        recdblist.printutf8(file)
+        recdblist.printutf8(unicode(file,'utf-8'),verbose_level=800)
         file=os.path.join(movepath,file)
         if os.path.isfile(file):
             name=os.path.splitext(os.path.split(file)[1])
             name=name[0]
-            name=zenhan.toHankaku(unicode(name))
+            name=zenhan.toHankaku(unicode(name,'utf-8'))
             p1=detNameType(name,movepath)
-            recdblist.printutf8(p1['title']+" "+str(p1['num']))
+            #recdblist.printutf8(p1['title']+" "+str(p1['num']))
             time1=time.localtime(os.path.getmtime(file))
             time1=datetime.datetime.fromtimestamp(os.path.getmtime(file))
             if p1['num']!=-1:
                 ff.append([p1['num'],p1['title'],time1])
                 if maxnum<p1['num']+1:
                     maxnum=p1['num']+1
-    detMultiDeltaDays(ff)
+    return detMultiDeltaDays(ff)
 def detMultiDeltaDays(num_with_title_with_dates):
     maxnum=0
     for ft in num_with_title_with_dates:
@@ -56,13 +68,13 @@ def detMultiDeltaDays(num_with_title_with_dates):
             for ft3 in f3[i]:
                 for ft4 in f3[j]:
                     for gdd in detSingleDeltaDay(i, ft3[2], j, ft4[2]):
-                        print gdd
+                        #print gdd
                         if fret.get(gdd[0])!=None:
-                            print fret
+                            #print fret
                             fret[gdd[0]]=fret[gdd[0]]+gdd[1]
                         else:
                             fret[gdd[0]]=gdd[1]
-    print fret
+    #print fret
     maxk=0
     maxp=0
     for i in range(maxnum):
@@ -70,8 +82,8 @@ def detMultiDeltaDays(num_with_title_with_dates):
             if maxp<fret[i]:
                 maxk=i
                 maxp=fret[i]
-    print maxk
-    print maxp
+    #print maxk
+    #print maxp
     return maxk
 def detSingleDeltaDay(num1,date1,num2,date2):
     dd=date1-date2
@@ -92,7 +104,7 @@ def detSingleDeltaDay(num1,date1,num2,date2):
         dm=dm+d
     if dp%d*2>d:
         dp=dp+d
-    recdblist.printutf8(str(d)+":"+str(dn))
+    #recdblist.printutf8(str(d)+":"+str(dn))
     if dp!=dn:
         ret.append([dn/d,60])
         ret.append([dp/d,40])
@@ -111,7 +123,14 @@ def detNameType(title,path):
     type Aj ---title第<number>話
     path --search reflexively
     """
-    recdblist.printutf8(title)
+    new=0
+    if re.search(u"[新]",title) or re.search(u" 新",title):
+        title=title.replace(u"[新]","")
+        title=title.replace(u" 新","")
+        new=1
+    recdblist.printutf8(title,verbose_level=800)
+    title=auto_move.getTitle(title)##titleから日時を除く
+    title=title.replace(u"無料≫","")
     #rA=re.compile(".+(?P<title>)#\d(?P<num>)\s[0,10]\z")
     rA=re.compile("(.+)#(\d*)\s*\Z")
     tA=rA.match(title)
@@ -121,30 +140,30 @@ def detNameType(title,path):
     tAj=rAj.match(title)
     ret={'title':"",'type':"",'num':0,'subtitle':"",'folder':""}
     if tA:
-        recdblist.printutf8("typeA")
-        recdblist.printutf8("title="+tA.group(1))
-        recdblist.printutf8("num="+tA.group(2))
+        #recdblist.printutf8("typeA")
+        #recdblist.printutf8("title="+tA.group(1))
+        #recdblist.printutf8("num="+tA.group(2))
         ret['type']="A"
-        ret['title']=tA.group(1)
+        ret['title']=tA.group(1).replace(" ","")
         ret['num']=int(tA.group(2))
-        ret['folder']=searchFolder(tA.group(1),path)
+        ret['folder']=searchFolder(tA.group(1),unicode(path,'utf-8'))
     if tAj:
-        recdblist.printutf8("typeA")
-        recdblist.printutf8("title="+tAj.group(1))
-        recdblist.printutf8("num="+tAj.group(2))
+        #recdblist.printutf8("typeA")
+        #recdblist.printutf8("title="+tAj.group(1))
+        #recdblist.printutf8("num="+tAj.group(2))
         ret['type']="Aj"
-        ret['title']=tAj.group(1)
+        ret['title']=tAj.group(1).replace(" ","")
         ret['num']=int(tAj.group(2))
-        ret['folder']=searchFolder(tAj.group(1),path)
+        ret['folder']=searchFolder(tAj.group(1),unicode(path,'utf-8'))
     elif tB:
-        recdblist.printutf8("typeB")
-        recdblist.printutf8("title="+tB.group(1))
-        recdblist.printutf8("num="+tB.group(2))
-        recdblist.printutf8("subtitle="+tB.group(3))
+        #recdblist.printutf8("typeB")
+        #recdblist.printutf8("title="+tB.group(1))
+        #recdblist.printutf8("num="+tB.group(2))
+        #recdblist.printutf8("subtitle="+tB.group(3))
         ret['type']="B"
-        ret['title']=tB.group(1)
+        ret['title']=tB.group(1).replace(" ","")
         ret['num']=int(tB.group(2))
-        ret['folder']=searchFolder(tB.group(1),path)
+        ret['folder']=searchFolder(tB.group(1),unicode(path,'utf-8'))
         ret['subtitle']=tB.group(3)
     else:#type C or type D
         #fold=searchFolder(title, path)
@@ -153,9 +172,9 @@ def detNameType(title,path):
         rt=["",0,""]
         for t in ts:
             tt=tt+" "+t
-            ft1=searchFolder(tt,path)
-            recdblist.printutf8(tt)
-            print ft1
+            ft1=searchFolder(tt,unicode(path,'utf-8'))
+            #recdblist.printutf8(tt)
+            #print ft1
             if ft1!="":
                 #recdblist.printutf8(rt)
                 #recdblist.printutf8(ft1[0]+" : "+str(ft1[1]))
@@ -166,7 +185,7 @@ def detNameType(title,path):
                     #recdblist.printutf8(rt)
         #recdblist.printutf8("title="+rt[0][1:]+"/")
         #recdblist.printutf8("subtitle = "+title.replace(rt[0][1:],"")[1:])
-        ret['title']=rt[0][1:]
+        ret['title']=rt[0][1:].replace(" ","")
         ret['num']=-1
         ret['folder']=rt[2]
         ret['subtitle']=title.replace(rt[0][1:],"")[1:]
@@ -174,8 +193,10 @@ def detNameType(title,path):
             ret['type']="D"
         else:
             ret['type']="C"
+    if new==1:
+        ret['num']=1
     return ret
-def searchFolder(title,path,threshold=300):
+def searchFolder(title,path,threshold=500):
     """
     titleからフォルダーを探す
     """
@@ -201,7 +222,9 @@ def searchFolder(title,path,threshold=300):
         else:
             cmpp=os.path.basename(dirp)
             appp=os.path.dirname(dirp)
-        p=n_gram.trigram(title,cmpp)
+        ntitle=auto_move.getTitle(title)
+        ncmpp=auto_move.getTitle(cmpp)
+        p=n_gram.trigram(ntitle,ncmpp)
         if p>0:
             ngram.append((p,appp))
     ngram=list(set(ngram))
@@ -210,7 +233,7 @@ def searchFolder(title,path,threshold=300):
     if len(ngram)>0:
         #recdblist.printutf8(title + ngram[0][1] + " : "+str(ngram[0][0]))
         if ngram[0][0]>threshold:
-            return [ngram[0][1],ngram[0][0]]
+            return ngram[0][1]
         else:
             return ""
     else: