我想在文本文件中搜索第二个文本文件中指定的完全匹配项。例如,文件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行。每一行都是要在第一个文件中查找的一个可能的字符串。因此,目前执行时间非常短。
我想必须有一个更有效的解决方案来做到这一点。如果有人能帮忙就太好了。
您可以将所有搜索项的所有小写存储在一个集合中,并像这样更改代码:
编辑:要打印频率,您可以使用字典
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
如本文所述,在set
中检查in
的平均时间复杂度为O(1)。