2014-11-27 7 views
-1

Я пытаюсь выяснить, как подсчитать количество частот, которые в текстовом файле появились теги слова I-GENE и O.Подсчет частоты

Пример файла Я пытаюсь вычислить это:.

45 WORDTAG O cortex 
2 WORDTAG I-GENE cdc33 
4 WORDTAG O PPRE 
4 WORDTAG O How 
44 WORDTAG O if 

Я пытаюсь вычислить сумму слова [0] (столбец 1) в одной и той же категории (например, I- гЕН) то же самое с категории (например, O)

В этом примере:.

сумма слов с категории I-GENE 2
и сумма слов с категорией O 97

МОЙ КОД:

import os 

def reading_files (path): 

    counter = 0 

    for root, dirs, files in os.walk(path): 

     for file in files: 
      if file != ".DS_Store": 
       if file == "gene.counts": 
        open_file = open(root+file, 'r', encoding = "ISO-8859-1") 
        for line in open_file: 
         tmp = line.split(' ') 

         for words in tmp: 

          for word in words: 
           if (words[2]=='I-GENE'): 
            sum = sum + int(words[0] 
           if (words[2] == 'O'): 
            sum = sum + int(words[0]) 

          else: 
           print('Nothing') 

         print(sum) 
+0

Итак ... что делает ваш код? Что вы хотите сделать вместо этого? Просьба представить материалы и ожидаемые и фактические результаты. – jonrsharpe

+0

В программировании это не называется частотой, которая является периодическим словом, числом вхождений за период. При программировании слова есть OCCURENCES и wordcount, и у вас будет больше удачи в этом ключевом слове, на самом деле вы набираете его на goog witht string и python, и вы получите ответ почти сразу. –

ответ

0

Я думаю, вы должны удалить петлю слово - не использовать его

for word in words: 

Я хотел бы использовать словарь для этого - если вы хотите решить эту проблему в целом. Пока вы читаете файл, заполните словарь: - если у вас уже есть ключ в dict -> Увеличьте значение для него - Если это новый ключ, добавьте в dict и установите значение для него. стоимость.

def reading_files (path): 
freqDict = dict() 
... 
for words in tmp: 
    if words[2] not in freqDict(): 
     freqDict[words[2]] = 0 
    freqDict[words[2]] += int(words[0]) 

После создания словаря, вы можете вернуть его и использовать его с ключевым словом, или вы можете передать ключевое слово для функции, и возвращает значение, или просто распечатать его. Я предпочитаю первый вариант - используйте как можно меньше операций ввода-вывода файла. Вы можете использовать собранные данные из памяти.

Для этого решения я написал обертку:

def getValue(fDict, key): 
if key not in fDict: 
    return "Nothing" 
return str(fDict[key]) 

Так что будет вести себя, как ваш пример.

Это не обязательно, но хорошая практика: закройте файл, когда вы его больше не используете.

Смежные вопросы