Python 3で曞かれた英語の単語の呚波数分析噚。WordNetを䜿甚しお単語を正芏化し、StarDictを䜿甚しお翻蚳できたす。

みなさんこんにちは

私は英語を勉匷し、このプロセスをあらゆる方法で簡玠化したす。 どういうわけか、特定のテキストの翻蚳ず転写ずずもに単語のリストを取埗する必芁がありたした。 タスクは難しくなく、仕事に取り掛かりたした。 少し埌に、 Pythonスクリプトが䜜成されたした。Pythonスクリプトは、これをすべお知っおいたす。さらに、英語のテキストを含むすべおのファむルから呚波数蟞曞を取埗したかったので、もう少し知っおいたす。 それで、スクリプトの小さなセットが出おきたした。それに぀いおお話ししたいず思いたす。

スクリプトは、ファむルを解析し、英語の単語を遞択し、それらを正芏化しお、結果の英語の単語のリスト党䜓から最初のcountWordの単語をカりントおよび発行するこずによっお機胜したす。

最終ファむルでは、単語は次のように蚘述されたす。

[繰り返し回数] [単語自䜓] [単語の翻蚳]



次に䜕が起こるか

  1. ファむルから英語の単語のリストを取埗するこずから始めたす 正芏衚珟を䜿甚。
  2. 次に、単語の正芏化を開始したす。぀たり、単語を自然な圢匏から蟞曞に保存されおいる圢匏に戻したすここでは、 WordNet圢匏に぀いお少し孊習したす。
  3. 次に、すべおの正芏化された単語の出珟回数をカりントしたすこれは迅速か぀簡単です。
  4. さらに、 StarDict圢匏の詳现に぀いおも説明したす。これは、それを利甚しお翻蚳ず文字起こしを行うためです。
  5. 最埌に、結果をどこかに曞き蟌みたす Excelファむルを遞択したした。




私はpython 3.3を䜿甚したしたが、倚くの堎合、必芁なモゞュヌルが欠萜しおいたため、python 2.7で蚘述しなかったこずを埌悔しなければなりたせん。



呚波数アナラむザヌ。



それでは、簡単なものから始めお、ファむルを取埗し、それらを単語に解析し、カりントし、゜ヌトし、結果を生成したしょう。

たず、テキスト内の英語の単語を怜玢するための正芏衚珟を䜜成したす。



英語の単語を怜玢するための正芏衚珟


「over」などの簡単な英語の単語は、 「[a-zA-Z] +」ずいう衚珟を䜿甚しお芋぀けるこずができたす。英語のアルファベットの1぀以䞊の文字がここで怜玢されたす。

「叞什官」などの耇合語を芋぀けるのはやや難しくなりたす。「叞什官」、「in-」、「チヌフ」ずいう圢匏の連続した郚分匏を探す必芁がありたす。 正芏衚珟の圢匏は、 「[a-zA-Z] +-* [A-zA-Z] +」です。

䞭間郚分匏が匏に存圚する堎合、結果にも含たれたす。 そのため、「叞什官」ずいう単語だけでなく、芋぀かったすべおの郚分匏も怜玢結果に含たれたす。 正芏衚珟は、 「?: [A-zA-Z] +-* [A-zA-Z] +」ずいう圢匏を取りたす。 私たちはただ、衚珟に「did n't」ずいう圢匏のアポストロフィを含む単語を含める必芁がありたす。 これを行うには、最初の郚分匏の「-」を眮き換えたす 「[-']」 。

それだけです。正芏衚珟の改善を終了したす。さらに改善するこずもできたすが、これに぀いお詳しく説明したす。

「[a-zA-Z] + [-']* [a-zA-Z] +」



英単語の呚波数分析噚の実装




英語の単語を抜出し、それらをカりントしお結果を生成できる小さなクラスを䜜成したす。
# -*- coding: utf-8 -*- import re import os from collections import Counter class FrequencyDict: def __init__(): #        self.wordPattern = re.compile("((?:[a-zA-Z]+[-']?)*[a-zA-Z]+)") #  (  collections.Counter       ) self.frequencyDict = Counter() #   ,     def ParseBook(self, file): if file.endswith(".txt"): self.__ParseTxtFile(file, self.__FindWordsFromContent) else: print('Warning: The file format is not supported: "%s"' %file) #      txt def __ParseTxtFile(self, txtFile, contentHandler): try: with open(txtFile, 'rU') as file: for line in file: #    contentHandler(line) #       except Exception as e: print('Error parsing "%s"' % txtFile, e) #               def __FindWordsFromContent(self, content): result = self.wordPattern.findall(content) #       for word in result: word = word.lower() #      self.frequencyDict[word] += 1 #         #    countWord   ,      def FindMostCommonElements(self, countWord): dict = list(self.frequencyDict.items()) dict.sort(key=lambda t: t[0]) dict.sort(key=lambda t: t[1], reverse = True) return dict[0 : int(countWord)]
      
      









これで、本質的に、呚波数蟞曞を䜿甚した䜜業は完了できたすが、䜜業はただ始たったばかりです。 問題は、テキスト内の単語が文法芏則を考慮しお曞かれおいるこずです。぀たり、末尟にed、ingなどの単語がテキスト内で発生する可胜性がありたす。 実際、動詞の圢匏am、is、areでさえ、異なる単語ずしおカりントされたす。

そのため、単語を単語カりンタヌに远加する前に、正しい圢匏にする必芁がありたす。

次のパヌトに移りたす- 英単語のノヌマラむザヌを曞きたす 。



英語の補助詞



ステミングず芋出し語化の 2぀のアルゎリズムがありたす。 ステミングずは、ヒュヌリスティック分析を指し、ベヌスは䜿甚したせん。 芋出し語化では、さたざたな単語ベヌスが䜿甚され、文法芏則に埓った倉換も適甚されたす。 結果の誀差は停滞時よりもはるかに小さいため、目的に応じお補題を䜿甚したす。



芋出し語化に぀いおは、すでにここやここなど、habrに関する蚘事がいく぀かありたした 。 圌らはAOTベヌスを䜿甚しおいたす。 繰り返したくありたせんでした。たた、他の芋出し語化のベヌスを探すのも面癜かったです。 WordNetに぀いおお話ししたいず思いたすが、その䞊で補題を䜜成したす。 たず、 公匏のWordNet Webサむトで、プログラムの゜ヌスコヌドずデヌタベヌス自䜓をダりンロヌドできたす。 WordNetには倚くの機胜がありたすが、必芁な機胜はごく䞀郚、぀たり単語の正芏化だけです。

デヌタベヌスのみが必芁です。 WordNetの゜ヌスプロセスCは、正芏化プロセス自䜓を説明しおいたす。本質的には、そこからアルゎリズムを取り出し、Pythonで曞き盎したした。 ああ、もちろん、Python甚のWordNet甚のラむブラリ-nltkがありたすが、たず、Python 2.7でのみ動䜜し、次に芋た限り、正芏化ではWordNetサヌバヌぞのリク゚ストのみが送信されたす。

レンマタむザヌの䞀般的なクラス図







図からわかるように、正芏化されおいるのは4぀の品詞名詞、動詞、圢容詞、副詞だけです。

正芏化プロセスを簡単に説明するず、次のようになりたす。

1.品詞ごずに、2぀のファむルがWordNetからダりンロヌドされたす-むンデックス蟞曞品詞に応じた名前むンデックスず拡匵子、副詞の堎合はindex.advなどず䟋倖ファむル品詞に応じた拡匵子excず名前、たずえばadv.excの堎合副詞。

2.正芏化䞭に、䟋倖の配列が最初にチェックされ、単語が存圚する堎合、その正芏化された圢匏が返されたす。 単語が䟋倖ではない堎合、単語のゎヌストは文法芏則に埓っお始たりたす。぀たり、語尟が切り捚おられ、新しい語尟が接着され、次に単語がむンデックス配列で怜玢され、そこにある堎合、単語は正芏化されたず芋なされたす。 それ以倖の堎合、ルヌルが終了するか、単語が以前に正芏化されるたで、次のルヌルが適甚されたす。

Lemmalizerのクラス

品詞の基本クラスBaseWordNetItem.py
 # -*- coding: utf-8 -*- import os class BaseWordNetItem: #  def __init__(self, pathWordNetDict, excFile, indexFile): self.rule=() #        . self.wordNetExcDict={} #   self.wordNetIndexDict=[] #   self.excFile = os.path.join(pathWordNetDict, excFile) #      self.indexFile = os.path.join(pathWordNetDict, indexFile) #      self.__ParseFile(self.excFile, self.__AppendExcDict) #    self.__ParseFile(self.indexFile, self.__AppendIndexDict) #    self.cacheWords={} #  .     ,  -  ,  -   #       . #     : [-][][] def __AppendExcDict(self, line): #     ,     2      (  - ,  - ).         group = [item.strip() for item in line.replace("\n","").split(" ")] self.wordNetExcDict[group[0]] = group[1] #       . def __AppendIndexDict(self, line): #        group = [item.strip() for item in line.split(" ")] self.wordNetIndexDict.append(group[0]) #     ,          ,    def __ParseFile(self, file, contentHandler): try: with open(file, 'r') as openFile: for line in openFile: contentHandler(line) #       except Exception as e: raise Exception('File does not load: "%s"' %file) #      .      ,   . #        def _GetDictValue(self, dict, key): try: return dict[key] except KeyError: return None #     ,    True,  False. #  ,  ,   ,   (       ). def _IsDefined(self, word): if word in self.wordNetIndexDict: return True return False #   (  ) def GetLemma(self, word): word = word.strip().lower() #     if word == None: return None #   ,           lemma = self._GetDictValue(self.cacheWords, word) if lemma != None: return lemma # ,      ,    if self._IsDefined(word): return word #   ,    ,     lemma = self._GetDictValue(self.wordNetExcDict, word) if lemma != None: return lemma #    ,         ,      . lemma = self._RuleNormalization(word) if lemma != None: self.cacheWords[word] = lemma #       return lemma return None #     (  ,     ) def _RuleNormalization(self, word): #    ,         ,  ,   . for replGroup in self.rule: endWord = replGroup[0] if word.endswith(endWord): lemma = word #     lemma = lemma.rstrip(endWord) #    lemma += replGroup[1] #    if self._IsDefined(lemma): # ,        ,    ,    return lemma return None
      
      







動詞を正芏化するためのクラスWordNetVerb.py
 # -*- coding: utf-8 -*- from WordNet.BaseWordNetItem import BaseWordNetItem #     #    BaseWordNetItem class WordNetVerb(BaseWordNetItem): def __init__(self, pathToWordNetDict): #   (BaseWordNetItem) BaseWordNetItem.__init__(self, pathToWordNetDict, 'verb.exc', 'index.verb') #        .  ,  "s"   "" , "ies"   "y" . self.rule = ( ["s" , "" ], ["ies" , "y" ], ["es" , "e" ], ["es" , "" ], ["ed" , "e" ], ["ed" , "" ], ["ing" , "e" ], ["ing" , "" ] ) #      GetLemma(word)     BaseWordNetItem
      
      







名詞の正芏化のためのクラスWordNetNoun.py
 # -*- coding: utf-8 -*- from WordNet.BaseWordNetItem import BaseWordNetItem #       #    BaseWordNetItem class WordNetNoun(BaseWordNetItem): def __init__(self, pathToWordNetDict): #   (BaseWordNetItem) BaseWordNetItem.__init__(self, pathToWordNetDict, 'noun.exc', 'index.noun') #        .  ,  "s"   "", "ses"   "s"  . self.rule = ( ["s" , "" ], ["'s" , "" ], ["'" , "" ], ["ses" , "s" ], ["xes" , "x" ], ["zes" , "z" ], ["ches" , "ch" ], ["shes" , "sh" ], ["men" , "man" ], ["ies" , "y" ] ) #    (  ) #       BaseWordNetItem,          , #      def GetLemma(self, word): word = word.strip().lower() #    ,         if len(word) <= 2: return None #     "ss",         if word.endswith("ss"): return None #   ,           lemma = self._GetDictValue(self.cacheWords, word) if lemma != None: return lemma # ,      ,    if self._IsDefined(word): return word #   ,    ,     lemma = self._GetDictValue(self.wordNetExcDict, word) if (lemma != None): return lemma #     "ful",   "ful",   ,     . #  ,  ,   "spoonsful"    "spoonful" suff = "" if word.endswith("ful"): word = word[:-3] #   "ful" suff = "ful" #   "ful",     #    ,         ,      . lemma = self._RuleNormalization(word) if (lemma != None): lemma += suff #     "ful",    self.cacheWords[word] = lemma #       return lemma return None
      
      







副詞WordNetAdverb.pyを正芏化するためのクラス
 # -*- coding: utf-8 -*- from WordNet.BaseWordNetItem import BaseWordNetItem #     #    BaseWordNetItem class WordNetAdverb(BaseWordNetItem): def __init__(self, pathToWordNetDict): #   (BaseWordNetItem) BaseWordNetItem.__init__(self, pathToWordNetDict, 'adv.exc', 'index.adv') #      (adv.exc)    (index.adv). #           .
      
      







圢容詞WordNetAdjective.pyを正芏化するためのクラス
 # -*- coding: utf-8 -*- from WordNet.BaseWordNetItem import BaseWordNetItem #       #    BaseWordNetItem class WordNetAdjective(BaseWordNetItem): def __init__(self, pathToWordNetDict): #   (BaseWordNetItem) BaseWordNetItem.__init__(self, pathToWordNetDict, 'adj.exc', 'index.adj') #        .  ,  "er"   ""  "e"  . self.rule = ( ["er" , "" ], ["er" , "e"], ["est" , "" ], ["est" , "e"] ) #      GetLemma(word)     BaseWordNetItem
      
      







Lemmatizer Lemmatizer.pyのクラス
 # -*- coding: utf-8 -*- from WordNet.WordNetAdjective import WordNetAdjective from WordNet.WordNetAdverb import WordNetAdverb from WordNet.WordNetNoun import WordNetNoun from WordNet.WordNetVerb import WordNetVerb class Lemmatizer: def __init__(self, pathToWordNetDict): #    self.splitter = "-" #      adj = WordNetAdjective(pathToWordNetDict) #  noun = WordNetNoun(pathToWordNetDict) #  adverb = WordNetAdverb(pathToWordNetDict) #  verb = WordNetVerb(pathToWordNetDict) #  self.wordNet = [verb, noun, adj, adverb] #     (, ) def GetLemma(self, word): #     ,    ,   ( )  ,    wordArr = word.split(self.splitter) resultWord = [] for word in wordArr: lemma = self.__GetLemmaWord(word) if (lemma != None): resultWord.append(lemma) if (resultWord != None): return self.splitter.join(resultWord) return None #   (  ) def __GetLemmaWord(self, word): for item in self.wordNet: lemma = item.GetLemma(word) if (lemma != None): return lemma return None
      
      









さお、正芏化が終了したした。 これで、呚波数アナラむザヌは単語を正芏化できたす。 タスクの最埌の郚分-英語の単語の翻蚳ず転写を取埗したす。



StarDict蟞曞を䜿甚した倖囜語翻蚳者



StarDictに぀いおは長い間曞くこずができたすが、この圢匏の䞻な利点は、ほずんどすべおの蚀語で倚くの蟞曞デヌタベヌスがあるこずです。 HabrのStarDictトピックに関する蚘事はありたせんでした。このギャップを埋める時が来たした。 StarDict圢匏を蚘述するファむルは通垞、゜ヌス自䜓の隣にありたす。

すべおの远加を砎棄する堎合、この圢匏で最も最小限の知識セットは次のようになりたす。

各蟞曞には3぀の必須ファむルが含たれおいる必芁がありたす。



1. ifo拡匵子を持぀ファむル-蟞曞自䜓の䞀貫した説明が含たれおいたす。

2.拡匵子がidxのファむル。 idxファむル内の各゚ントリは、次々に続く3぀のフィヌルドで構成されたす。



3. dict拡匵子を持぀ファむル-翻蚳自䜓が含たれおいたす。翻蚳ぞのオフセットを知るこずでアクセスできたすオフセットはidxファむルに蚘録されたす。



最終的にどのクラスになるかに぀いお考え盎すこずなく、ファむルごずに1぀のクラスを䜜成し、それらを結合する1぀の䞀般的なStarDictクラスを䜜成したした。

結果のクラス図







StarDictのクラス

蟞曞゚ントリの基本クラスBaseStarDictItem.py
 # -*- coding: utf-8 -*- import os class BaseStarDictItem: def __init__(self, pathToDict, exp): #     self.encoding = "utf-8" #      self.dictionaryFile = self.__PathToFileInDirByExp(pathToDict, exp) #    self.realFileSize = os.path.getsize(self.dictionaryFile) #     path      exp def __PathToFileInDirByExp(self, path, exp): if not os.path.exists(path): raise Exception('Path "%s" does not exists' % path) end = '.%s'%(exp) list = [f for f in os.listdir(path) if f.endswith(end)] if list: return os.path.join(path, list[0]) #    else: raise Exception('File does not exist: "*.%s"' % exp)
      
      







クラスifo.py
 # -*- coding: utf-8 -*- from StarDict.BaseStarDictItem import BaseStarDictItem from Frequency.IniParser import IniParser class Ifo(BaseStarDictItem): def __init__(self, pathToDict): #   (BaseStarDictItem) BaseStarDictItem.__init__(self, pathToDict, 'ifo') #     self.iniParser = IniParser(self.dictionaryFile) #   ifo   #        ,        self.bookName = self.__getParameterValue("bookname", None) #   [ ] self.wordCount = self.__getParameterValue("wordcount", None) #    ".idx"  [ ] self.synWordCount = self.__getParameterValue("synwordcount", "") #    ".syn"   [ ,    ".syn"] self.idxFileSize = self.__getParameterValue("idxfilesize", None) #  ( ) ".idx" .    ,        [ ] self.idxOffsetBits = self.__getParameterValue("idxoffsetbits", 32) #    (32  64),         .dict.      3.0.0,      32 [ ] self.author = self.__getParameterValue("author", "") #   [ ] self.email = self.__getParameterValue("email", "") #  [ ] self.description = self.__getParameterValue("description", "") #   [ ] self.date = self.__getParameterValue("date", "") #    [ ] self.sameTypeSequence = self.__getParameterValue("sametypesequence", None) # ,    [ ] self.dictType = self.__getParameterValue("dicttype", "") #     ,  WordNet[ ] def __getParameterValue(self, key, defaultValue): try: return self.iniParser.GetValue(key) except: if defaultValue != None: return defaultValue raise Exception('\n"%s" has invalid format (missing parameter: "%s")' % (self.dictionaryFile, key))
      
      







クラスidx.py
 # -*- coding: utf-8 -*- from struct import unpack from StarDict.BaseStarDictItem import BaseStarDictItem class Idx(BaseStarDictItem): #  def __init__(self, pathToDict, wordCount, idxFileSize, idxOffsetBits): #   (BaseStarDictItem) BaseStarDictItem.__init__(self, pathToDict, 'idx') self.idxDict ={} # , self.idxDict = {'.': [_____dict, _____dict], ...} self.idxFileSize = int(idxFileSize) #   .idx,   .ifo  self.idxOffsetBytes = int(idxOffsetBits/8) #  ,         .dict.        self.wordCount = int(wordCount) #    ".idx"  #    (  .ifo    .idx  [idxfilesize]      ) self.__CheckRealFileSize() #   self.idxDict    .idx self.__FillIdxDict() #    (  .ifo     [wordcount]        .idx ) self.__CheckRealWordCount() #    ,   .ifo ,           def __CheckRealFileSize(self): if self.realFileSize != self.idxFileSize: raise Exception('size of the "%s" is incorrect' %self.dictionaryFile) #    ,   .ifo ,       .idx       def __CheckRealWordCount(self): realWordCount = len(self.idxDict) if realWordCount != self.wordCount: raise Exception('word count of the "%s" is incorrect' %self.dictionaryFile) #         ,      def __getIntFromByteArray(self, sizeInt, stream): byteArray = stream.read(sizeInt) #   ,    #       formatCharacter = 'L' #   "unsigned long" ( sizeInt = 4) if sizeInt == 8: formatCharacter = 'Q' #   "unsigned long long" ( sizeInt = 8) format = '>' + formatCharacter #     : "  " + " " #  '>' - ,       int( formatCharacter)     . integer = (unpack(format, byteArray))[0] #       return int(integer) #    .idx    (   3- )       self.idxDict def __FillIdxDict(self): languageWord = "" with open(self.dictionaryFile, 'rb') as stream: while True: byte = stream.read(1) #    if not byte: break #    ,     if byte != b'\0': #        '\0',      languageWord += byte.decode("utf-8") else: #    '\0',  ,         ("     dict"  "     dict") wordDataOffset = self.__getIntFromByteArray(self.idxOffsetBytes, stream) #    "     dict" wordDataSize = self.__getIntFromByteArray(4, stream) #    "     dict" self.idxDict[languageWord] = [wordDataOffset, wordDataSize] #    self.idxDict :   +  +   languageWord = "" #  ,     #       .dict ("     dict"  "     dict"). #      ,   None def GetLocationWord(self, word): try: return self.idxDict[word] except KeyError: return [None, None]
      
      







クラスDict.py
 # -*- coding: utf-8 -*- from StarDict.BaseStarDictItem import BaseStarDictItem #     ( , sametypesequence = tm). #  -x    (       utf-8,  '\0'): # 'm' -     utf-8,  '\0' # 'l' -       utf-8,  '\0' # 'g' -        Pango # 't' -    utf-8,  '\0' # 'x' -    utf-8,    xdxf # 'y' -    utf-8,  (YinBiao)   (KANA)  # 'k' -    utf-8,    KingSoft PowerWord XML # 'w' -     MediaWiki # 'h' -     Html # 'n' -     WordNet # 'r' -    .      (jpg),  (wav),  (avi), (bin)   . # 'W' - wav  # 'P' -  # 'X' -       class Dict(BaseStarDictItem): def __init__(self, pathToDict, sameTypeSequence): #   (BaseStarDictItem) BaseStarDictItem.__init__(self, pathToDict, 'dict') # ,     self.sameTypeSequence = sameTypeSequence def GetTranslation(self, wordDataOffset, wordDataSize): try: #              .dict self.__CheckValidArguments(wordDataOffset, wordDataSize) #   .dict   with open(self.dictionaryFile, 'rb') as file: #   file.seek(wordDataOffset) #      ,     byteArray = file.read(wordDataSize) #   ,     return byteArray.decode(self.encoding) #       o (self.encoding     BaseDictionaryItem) except Exception: return None def __CheckValidArguments(self, wordDataOffset, wordDataSize): if wordDataOffset is None: pass if wordDataOffset < 0: pass endDataSize = wordDataOffset + wordDataSize if wordDataOffset < 0 or wordDataSize < 0 or endDataSize > self.realFileSize: raise Exception
      
      









さお、翻蚳者は準備ができおいたす。今床は、呚波数アナラむザ、ワヌドノヌマラむザ、およびトランスレヌタを組み合わせる必芁がありたす。main.pyファむルずSettings.ini蚭定ファむルを䜜成したす。

メむンファむルmain.py
 # -*- coding: utf-8 -*- import os import xlwt3 as xlwt from Frequency.IniParser import IniParser from Frequency.FrequencyDict import FrequencyDict from StarDict.StarDict import StarDict ConfigFileName="Settings.ini" class Main: def __init__(self): self.listLanguageDict = [] #      StarDict self.result = [] #      ( , ,  ) try: #    - config = IniParser(ConfigFileName) self.pathToBooks = config.GetValue("PathToBooks") #   ini   PathToBooks,     (,   ),      self.pathResult = config.GetValue("PathToResult") #   ini   PathToResult,       self.countWord = config.GetValue("CountWord") #   ini   CountWord,       ,    self.pathToWordNetDict = config.GetValue("PathToWordNetDict") #   ini   PathToWordNetDict,      WordNet self.pathToStarDict = config.GetValue("PathToStarDict") #   ini   PathToStarDict,        StarDict #    StarDict           .      listPathToStarDict listPathToStarDict = [item.strip() for item in self.pathToStarDict.split(";")] #       StarDict     for path in listPathToStarDict: languageDict = StarDict(path) self.listLanguageDict.append(languageDict) #   ,      self.listBooks = self.__GetAllFiles(self.pathToBooks) #    self.frequencyDict = FrequencyDict(self.pathToWordNetDict) #  ,   StarDict  WordNet.    ,      ,     self.__Run() except Exception as e: print('Error: "%s"' %e) #    ,    path def __GetAllFiles(self, path): try: return [os.path.join(path, file) for file in os.listdir(path)] except Exception: raise Exception('Path "%s" does not exists' % path) #     ,      .        ,    def __GetTranslate(self, word): valueWord = "" for dict in self.listLanguageDict: valueWord = dict.Translate(word) if valueWord != "": return valueWord return valueWord #   ( , ,  )   countWord     Excel def __SaveResultToExcel(self): try: if not os.path.exists(self.pathResult): raise Exception('No such directory: "%s"' %self.pathResult) if self.result: description = 'Frequency Dictionary' style = xlwt.easyxf('font: name Times New Roman') wb = xlwt.Workbook() ws = wb.add_sheet(description + ' ' + self.countWord) nRow = 0 for item in self.result: ws.write(nRow, 0, item[0], style) ws.write(nRow, 1, item[1], style) ws.write(nRow, 2, item[2], style) nRow +=1 wb.save(os.path.join(self.pathResult, description +'.xls')) except Exception as e: print(e) #      def __Run(self): #       for book in self.listBooks: self.frequencyDict.ParseBook(book) #   countWord        mostCommonElements = self.frequencyDict.FindMostCommonElements(self.countWord) #      for item in mostCommonElements: word = item[0] counterWord = item[1] valueWord = self.__GetTranslate(word) self.result.append([counterWord, word, valueWord]) #      Excel self.__SaveResultToExcel() if __name__ == "__main__": main = Main()
      
      







Settings.ini蚭定ファむル
 ;   (,   ),      PathToBooks = e:\Bienne\Frequency\Books ;    WordNet(    ) PathToWordNetDict = e:\Bienne\Frequency\WordNet\wn3.1.dict\ ;      StarDict(   ) PathToStarDict = e:\Bienne\Frequency\Dict\stardict-comn_dictd04_korolew ;     ,        Excel CountWord = 100 ; ,    (   Excel     -  , ,  ) PathToResult = e:\Bienne\Frequency\Books
      
      









ダりンロヌドしお远加でむンストヌルする必芁がある唯䞀のサヌドパヌティラむブラリはxlwtです。Excel圢匏のファむルを䜜成する必芁がありたす結果はそこに曞き蟌たれたす。

PathToStarDict倉数のSettings.ini蚭定ファむルでは、「;」を䜿甚しお耇数の蟞曞を䜜成できたす。この堎合、単語は蟞曞の順に怜玢されたす-単語が最初の蟞曞で芋぀かった堎合、怜玢は終了したす。それ以倖の堎合、他のすべおのStarDict蟞曞が怜玢されたす。



あずがき



この蚘事で説明されおいるすべおの゜ヌスは、githubからダりンロヌドできたす。

通知

  1. スクリプトはりィンドりの䞋に曞かれたした。
  2. 䜿甚されたpython 3.3 ;
  3. さらに、xlwtラむブラリをExcelで動䜜するように配眮する必芁がありたす。
  4. 個別に、WordNetおよびStarDictの蟞曞デヌタベヌスをダりンロヌドする必芁がありたすStarDict蟞曞の堎合は、アヌカむブされたパックファむルをdict拡匵子でさらに解凍する必芁がありたす。
  5. Settings.iniファむルで、蟞曞のパスず結果を保存する堎所を指定する必芁がありたす。
  6. , StarDict, ( ).



All Articles