2016-10-08 7 views
-1

私はいくつかのファイルをペルシア語で持っています。それらのすべてには多くの文章が含まれており、その後に「タブ」、ペルシャ語、「タブ」、そして英語の単語が含まれています。英語の単語は、それぞれの文のクラスを示します。私はすべてのクラスでペルシャ文の各単語の数を数えなければなりません。たとえば、「دانشگاه」という単語が「情熱」クラスで何回出現したか、「塩辛い」クラスで何回出現するかなどです。 (一部のファイルには2つ以上のクラスがあります)。私が書いたコードは、単語をファイル内で一度だけ数えます。上記のように、どのように単語の数を返すように変更できますか? (ヒント:「タブ」の後のペルシア語と英語の単語ではなく、文中の単語の数が必要です)。ファイルのすべてのクラスの単語を数えます。

enter image description here

from collections import Counter 

corpus = [] 
with open("T.txt", encoding='utf-8') as f: 
    for line in f: 
     t = line.strip().split("\t") 
     corpus.append (t) 
     for row in corpus: 
      wordcount = Counter(row[0].split()) 
     print (wordcount) 

https://www.dropbox.com/s/r88hglemg7aot0w/F.txt?dl=0

enter image description here

結果は、画像上の通りです。こと、

+0

問題が発生している特定の部分はありますか? –

答えて

0

以下は、それを行う最も効率的な方法ではありませんが、それは何をしているのかより明確です。

from collections import Counter, defaultdict 

#find all Persian words and save them in a set 
vocab = set() 
classes = set() 
with open("T.txt", encoding='utf-8') as fin: 
    for line in fin: 
     t = line.strip().split('\t') 
     sentences = t[0] 
     class = t[2] 
     classes.add(class) 
     for word in sentences.split(): 
      vocab.add(word) 
class_word_count = defaultdict(dict) 
for class in classes: 
    for word in vocab: 
     class_word_count[class][word] = 0 
#now start counting 
with open("T.txt", encoding='utf-8') as fin: 
    for line in fin: 
     t = line.strip().split('\t') 
     sentences = t[0] 
     class = t[2] 
     for word in sentences.split(): 
      class_word_count[class][word] = class_word_count[class][word] + 1 
print(class_word_count) 
+0

トレースバック(最新の呼び出しの最後): ファイル "C:/Users/yasini/Desktop/14.py"、11行目、 classes.append(CLAS)で はAttributeError: 'セット' オブジェクトが属性を持っていない「を追加' – Vahideh

+0

あなたは追加するために追加を変更できました – Ash

+0

残りの仕事のために私は各単語とその番号を達成する必要があります。あなたが私に方法を教えれば、私はたくさん感謝します。実際にこれは分類のためのNaive Bayesアルゴリズムのpertです。 – Vahideh

-1

アサー: 塩辛い{0、..... "دانشگاه"}:{1、... "دانشگاه"} 情熱:しかし、私が望む事はすべての単語については、以下のようにする必要がありますクラスが常に行[2]で見つかるようにファイル構造が固定され、残りのすべてが行ごとに集計されるのではなく、合計されます。 編集:このコードは、見つかった各単語を集計し、この単語が見つかったカテゴリのカウンタを保持します。カテゴリにカウンタが存在しない場合、単語はそのカテゴリに存在しません。

from collections import Counter, defaultdict 

wordcount = defaultdict(Counter) 
with open("T.txt", encoding='utf-8') as f: 
    for line in f: 
     t = line.strip().split("\t") 
     for word in t[0].split(): 
      wordcount[word] += Counter([t[2]]) 
print (wordcount) 
+0

defaultdict(、{'passion':カウンター( 'شور':40、 'زندگی:30、'شوق ':21、'دانشگاه ':10、'توجه ':10、 'ورود':10、 'جالب':10、 '13':9、 'راهکار':9、 'واقعی':9、 'توست':8、 'مهربانی':8、 'نشاط ':7、'سراپا ':7、'شادی ':7、'افزایش ':6、'هیجان ':6、'عشق ':6、'تمرین ':6})、' salty ':カウンター({ 5、 'شذر':5、 'غذاهای':4、 'چاره\ u200cی':4、 'شور':15、 'نمک':10、 'غذای':6、 'زدم' 2、 'بدانید':2、 'شدید':1、 'میل':1、 'تند':1})} ) – Vahideh

+0

これが結果です。しかし、すべてのクラスですべての単語を数えたいと思う。 – Vahideh

+0

たとえば、 "توجه"という単語は "情熱"グループでカウントされ、 "塩味のあるグループ"になります。そこに存在する場合は数字を返し、クラスに存在しない場合はゼロを返します。 – Vahideh

関連する問題