我想在文本文件中搜索第二个文本文件中指定的完全匹配项。因此,例如文件1包含有关水果的文本,文本文件2包含以下单词:
Apple
Banana
Orange
Peach
现在,如果出现上述单词之一,则应搜索文件1的每一行。如果是这样的话,应该打印它的频率(包括重复次数不应该在输出中):
Apple 2
Orange 5
为此目的,我到目前为止已经获得了以下代码:
def search_terms():
with open("searchterms.txt", "r") as st:
search_terms = [line.rstrip('\n') for line in st]
return search_terms
def exact_match(phrase, word):
b = r'(\s|^|$)'
return re.match(b + word + b, phrase, flags=re.IGNORECASE)
f = open("file_to_search.txt", "r")
searchstr = search_terms()
for line in f:
for word in searchstr:
if exact_match(line,word):
print(word)
f.close()
一个问题是带有搜索词的文件大约有45k行。每行是在第一个文件中查找的一个可能的字符串。因此,目前执行时间很短。
我想必须有一个更有效的解决方案来做到这一点。如果有人可以提供帮助,那就太棒了。
答案 0 :(得分:0)
您可以将所有搜索字词的所有小写字母存储在一个集合中,并更改您的代码:
编辑:要打印频率,您可以使用字典
def search_terms():
with open("searchterms.txt", "r") as st:
search_terms = [line.rstrip('\n').lower() for line in st]
return search_terms
terms = set(search_terms())
freq = {}
for line in f:
for word in line.split():
if word.lower() in terms:
if word in freq:
freq[word]++
else:
freq[word]=1
for word,frequency in freq.iteritems():
print word,frequency
根据记录here,检查in
中的set
的平均时间复杂度为O(1)。