2016-10-29 20 views
0

私はペルシア語でファイルを持っています(ペルシャ語の文章、「タブ」、ペルシャ語、さらに「タブ」、そして英語の単語) 。私はペルシア語の文章の中で一意の単語の数を計算しなければならず、タブの後のペルシア語と英語の単語を計算しなければならない。コードは次のとおりです。ファイルの一部にあるユニークな単語の数を計算する方法

文章だけにアクセスするには、各行を「\ t」で分割する必要があります。文章の各単語にアクセスするには、tmp [0]を分割する必要があります。問題は、コードを実行すると以下のエラーが発生することです。これは、tmp [0]の後の分割のためです。しかし、tmp [0]の後でこの分割を省略すると、ユニークな単語ではない文字がカウントされます。どうすれば修正できますか? (ユニークな単語を計算するためにこのコードを書く別の方法がありますか?)

エラー: トレースバック(最後の最新の呼び出し): ファイル "C:\ Users \ユーザーyasini \デスクトップ\ 16.py" WordsProbs(ファイル) ファイル「Cで、15行目、:\ Users \ユーザーwords.update(normalizer.normalize(tmp [0] .split()))) ファイル "C:\ Python34 \ lib \ site-packages \ yasini \ Desktop \ 16.py"、行10、 (C):\ Python34 \ lib \ site-packages \ hazm \ Normalizer.py "、65行目、character_refinementファイル text = self.character_refinement(text) text = self.character_refinement(text) ファイル「C: text.translate(self.translations) AttributeError: 'list'オブジェクトに 'translate'属性がありません

サンプルファイル: https://www.dropbox.com/s/r88hglemg7aot0w/F.txt?dl=0

答えて

0

私はそれを自分で見つけました。

from hazm import* 

file = "F.txt" 
def WordsProbs (file): 
    words = [] 
    mergelist = [] 
    with open (file, encoding = "utf-8") as f1: 
     normalizer = Normalizer() 
     for line in f1: 
      line = normalizer.normalize(line) 
      tmp = line.strip().split("\t") 
      words = tmp[0].split() 
      #print(len(words), "unique words") 
      #print (words) 
      for i in words: 
       mergelist.append(i) 
       uniq = set(mergelist) 
       uniqueWords = len(uniq) 
0

問題はhazm.Normalizer.normalizeは、引数ではありませんリストとしてスペースで区切られた文字列を取ることです。 「使用法」という見出しの下に、hereの例が表示されます。

words.update(set(normalizer.normalize(tmp[0].split()))) 

words.update(set(normalizer.normalize(tmp[0]))) 

になるように、あなたのノーマライズ機能に引数から.split()を削除し、あなたが行って良いことがあります。

+0

私はこれまでに試しました。それを省略すると、単語ではなく文字が数えられます。 – Vahideh

関連する問題