我有一個單詞列表,我想查找它們出現在.txt文件中的次數。單詞列表是一樣的東西如下:如何計算另一個.txt文件中項目列表的出現次數?
wordlist = ['cup', 'bike', 'run']
我希望不僅能夠拿起這些話,但還搞什麼CUP,騎自行車,跑步,杯子等,所以我想我需要一個正表達。這是我在想什麼,但它不起作用:
len(re.findall(wordlist, filename, re.I))
在此先感謝!
我有一個單詞列表,我想查找它們出現在.txt文件中的次數。單詞列表是一樣的東西如下:如何計算另一個.txt文件中項目列表的出現次數?
wordlist = ['cup', 'bike', 'run']
我希望不僅能夠拿起這些話,但還搞什麼CUP,騎自行車,跑步,杯子等,所以我想我需要一個正表達。這是我在想什麼,但它不起作用:
len(re.findall(wordlist, filename, re.I))
在此先感謝!
你很近。但re.findall
需要一個模式和一個字符串,而不是一個單詞表和一個文件名。
但是,如果您將文件讀入一個字符串並將您的文字列表轉換爲模式,那麼您就會得到它。
您需要的圖案如下所示:r"cup|bike|run"
。你可以做"|".join(wordlist)
得到這個。
這是計算所有這些實例的非常鬆散的方式。請注意,如果您的文件中包含「我的警棍已被盜用」字樣,則re.findall
將在較大的單詞內找到「運行」和「杯子」。所以你可能想調整你的模式來捕捉單詞的開始和結尾。
要獲取整個單詞,請使用以下模式:r"\b(cup|bike|run)\b"
。當然,你需要填寫你正在尋找的所有單詞。
正則表達式的工作需要,但這應該讓你開始:
from __future__ import with_statement # only if < 2.6
from collections import defaultdict
import re
matches = defaultdict(int)
with open(filename) as f:
for mtch in re.findall(r'\b(cup|bike|run)', f.read(), re.I):
matches[mtch.lower()] += 1
目前還不清楚是什麼你在做什麼是必要的。當OP說「發生了多少次」時,你解決的是「每次發生多少次*」 - 在我看來,不需要單獨計數。同時只檢查\ b單詞的開始是麻煩 - 它會在* cupid *中找到* cup *,*在* rune *中* run *,* *在肉中*等等 – 2010-06-27 19:49:40
您必須首先猜測各種形式的話,並且似乎PITA。但這裏是一個簡化的FN我讀http://www.theenglishspace.com/spelling/後寫道:
def getWordForms(word):
''' Given an English word, return list of possible forms
'''
l = [word]
if len(word)>1:
l.extend([word + 's', word + 'ing', word + 'ed'])
wor, d = word[:-1], word[-1:]
if d == 'e':
l.append(word + 'd')
l.append(wor + 'ing')
if wor[-1:] == 'f':
l.append(wor[:-1] + 'ves')
elif d == 'y':
l.append(wor + 'ied')
l.append(wor + 'ies')
elif d == 'z':
l.append(word + 'zes') # double Z
elif d == 'f':
l.append(wor + 'ves')
elif d in 'shox':
l.append(word + 'es')
if re.match('[^aeiou][aeiou][^aeiou]', word):
l.append(word + d + 'ing') # double consonant
l.append(word + d + 'ed')
return l
它是猜測的話的變種過於慷慨 - 但是,這是確定的,因爲這不是一個拼寫檢查器,你將使用\ b。對於兩邊的詞邊界。
即使添加單詞調整的開始和結束,仍然會有不應該被發現的單詞(例如,「打嗝」,「矮胖」等)。也許使用WordNet或其他字典的東西來找到一個詞的所有不同形式,然後在搜索詞的兩邊使用詞邊界... – tgray 2010-06-25 18:48:51
謝謝,@tgray。我調整了我的答案,以包含匹配整個單詞的模式。 – eksortso 2010-06-25 19:24:37
謝謝eksortso!我不明白模式/字符串的區別,現在我明白了。我實際使用的單詞列表是由更長的單詞組成的,所以我不應該遇到與杯子一起出現的奇怪問題並運行,但我一定會更多地考慮只用整個單詞。謝謝! – dandyjuan 2010-06-25 20:12:31