2016-10-08 34 views
-1

我在波斯文件中有一些文件。他們都包含了很多句子,然後是一個「標籤」,然後是一個波斯語單詞,再次是一個「標籤」,然後是一個英文單詞。英語單詞顯示每個句子課程。我必須計算所有課程中波斯語句子中每個單詞的數量。例如,「激情」類中出現過多少次「دانشگاه」,在「鹹」類中出現過多少次。 (一些文件有兩個以上的類)。我寫的代碼在文件中只計算一次字。正如我上面所描述的那樣,我怎樣才能改變它返回單詞count? (提示:我只需要句子中的單詞數量,而不是「tab」之後的波斯語和英語單詞)。在一個文件的所有類別中計數單詞

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

結果是如上述的畫面。但我想的東西應該像下面所有的話: 激情{ 「دانشگاه」:1,...} 鹹{ 「دانشگاه」:0,...}

+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

Traceback(最近一次調用最後一次): 文件「C:/Users/yasini/Desktop/14.py」,第11行,在 classes.append(clas) AttributeError:'set'object has no attribute'append ' – Vahideh

+0

你可能已經改變追加以增加。 – Ash

+0

爲我的剩餘工作,我需要實現每個單詞和它的編號。我試過但我不能'如果你告訴我如何,我會很感激。實際上這是一種樸素貝葉斯算法的分類。 – Vahideh

-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('class'collections.Counter'>,{'passion':Counter({'شور':40,'زندگی':30,'شوق':21,'دانشگاه':10,'توجه':10, 'ورود':10, 'جالب':10, '13':9 'راهکار':9 'واقعی':9 'اشتیاق':9 'توست':8 'مهربانی':8「نشاط ':7, 'سراپا':7, 'شادی':7, 'افزایش':6 'هیجان':6 'عشق':6 'تمرین':6}), '鹹':計數器({' شور ':15, 'نمک':10, 'غذای':6 'زدم':5 'غذا':5 'شیرین':5 'غذاهای':4, 'چاره\ u200cی':4,' موجود':3 'عادت':3 'ذائقه':3 'مضرات':2 'بدانید':2 'شدید':1, 'میل':1, 'تند,':1})} ) – Vahideh

+0

這是結果。但是我希望每個單詞都包含在所有的課程中。 – Vahideh

+0

例如,單詞「توجه」被計入「激情」組和「鹹味組」兩者中,如果它存在則返回數字,如果該類不存在,則返回0 – Vahideh

相關問題