我有/usr/share/dict/words
我有一个庞大的句子文件,一行一行。我试图通过与字典进行比较,用外语和词汇单词来删除这些奇怪的句子。
Master.txt
Thanks to Your Greatness (谢谢你的美好)
Himatnagar has a small Railway Station
Pu$haz Ink
有人可以帮忙吗?我尝试使用diff
,但它只能在单词级别而不是句子级别进行比较
答案 0 :(得分:2)
您需要分阶段执行此操作。
首先,使用tr
(或者sed
- 稍慢但更灵活,允许更精确地删除标点符号等),您将句子文件分块为单词:
tr " " "\n" < hugefile | sort | uniq | grep -v -F -f dictionary > blacklist.txt
将-i
选项添加到grep
以防止不区分大小写(请参阅Scott的评论)。
然后,您使用uniq
收集唯一字词,然后使用grep -v -F -f dictionary
获取字典中不的所有字词。
一旦你有了这个&#34;黑名单&#34;,你可以请求不包含黑名单本身中的任何单词的所有行。同样,您可能想要考虑大小写:
grep -v -F -f blacklist.txt > goodlines.txt
在Python中,您可以采用更有效的方式遵循相同的方法:
答案 1 :(得分:1)
你想要这样的东西:
<强> 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
答案 2 :(得分:0)
如果你不介意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将打印该行,因为它是真的。