У меня есть текстовый файл с несколькими наблюдениями. Каждое наблюдение в одной строке. Я хотел бы обнаружить уникальное вхождение каждого слова в строке. Другими словами, если одно и то же слово встречается дважды или более в одной строке, оно все равно считается как один раз. Однако я хотел бы посчитать частоту встречаемости каждого слова во всех наблюдениях. Это означает, что если слово встречается в двух или более строках, я хотел бы подсчитать количество строк, в которых оно встречалось. Вот программа, которую я написал, и она обрабатывает большое количество файлов очень медленно. Я также удаляю определенные слова в файле, ссылаясь на другой файл. Пожалуйста, предложите предложения о том, как улучшить скорость. Спасибо.
import re, string
from itertools import chain, tee, izip
from collections import defaultdict
def count_words(in_file="",del_file="",out_file=""):
d_list = re.split('\n', file(del_file).read().lower())
d_list = [x.strip(' ') for x in d_list]
dict2={}
f1 = open(in_file,'r')
lines = map(string.strip,map(str.lower,f1.readlines()))
for line in lines:
dict1={}
new_list = []
for char in line:
new_list.append(re.sub(r'[0-9#$?*_><@\(\)&;:,.!-+%=\[\]\-\/\^]', "_", char))
s=''.join(new_list)
for word in d_list:
s = s.replace(word,"")
for word in s.split():
try:
dict1[word]=1
except:
dict1[word]=1
for word in dict1.keys():
try:
dict2[word] += 1
except:
dict2[word] = 1
freq_list = dict2.items()
freq_list.sort()
f1.close()
word_count_handle = open(out_file,'w+')
for word, freq in freq_list:
print>>word_count_handle,word, freq
word_count_handle.close()
return dict2
dict = count_words("in_file.txt","delete_words.txt","out_file.txt")