[英]Remove all lines containing word NOT in dictionary
我有/usr/share/dict/words
的英文單詞/usr/share/dict/words
我有一個巨大的句子文件,一行一行。 我試圖通過與字典進行比較來刪除這些奇怪的句子與外來詞匯和詞匯詞匯。
Master.txt
Thanks to Your Greatness (謝謝你的美好)
Himatnagar has a small Railway Station
Pu$haz Ink
有人可以幫忙嗎? 我嘗試使用diff
但它只能在單詞級別而不是句子級別進行比較
你需要分階段做到這一點。
首先,使用tr
(或者sed
- 稍慢但更靈活,允許更精確地刪除標點符號等),您將句子文件分塊為單詞:
tr " " "\n" < hugefile | sort | uniq | grep -v -F -f dictionary > blacklist.txt
為grep
添加-i
選項以防止不區分大小寫(請參閱Scott的評論)。
然后使用uniq
收集唯一的單詞,使用grep -v -F -f dictionary
來獲取不在字典中的所有單詞。
獲得此“黑名單”后,您可以請求黑名單本身中不包含任何單詞的所有行。 同樣,您可能想要考慮大小寫:
grep -v -F -f blacklist.txt > goodlines.txt
在Python中,您可以以更高效的方式遵循相同的方法:
你想要這樣的東西:
english-sentences-only.py
input_filename = 'INPUT-FILE' output_filename = 'OUTPUT-FILE' dictionary_filename = '/usr/share/dict/words' english_words = set(x[:-1].lower() for x in open(dictionary_filename).readlines()) def lines_with_only_english_words(input_filename): with open(input_filename) as fin: for line in fin: for w in line.split(): if w.lower() not in english_words: break else: yield line with open(output_filename, 'w') as fout: fout.writelines(lines_with_only_english_words(input_filename))
python english-sentences-only.py
如果你不介意awk:
awk 'FNR==NR{dict[$1]++;next} {for(i=1;i<=NF;i++)if(!($i in dict))next}1' /usr/share/dict/words file
說明
FNR == NR之后的花括號中的部分僅適用於作為字典的第一個文件的處理。 它將字典中的每個單詞保存在名為dict []的哈希中。 第二組花括號中的部分適用於主輸入文件的處理。 它循環遍歷該行上的所有單詞,如果字體中沒有出現任何單詞,則跳過該行,否則最后的1將打印該行,因為它是真的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.