我有一本来自 /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 -fdictionary
来获取所有不的单词字典。
一旦有了这个“黑名单”,您就可以请求所有不包含黑名单本身中任何单词的行。同样,您可能需要考虑大写/小写,也可能不考虑:
grep -v -F -f blacklist.txt > goodlines.txt
在 Python 中,您可以以一种可能更有效的方式遵循相同的方法:
- 将字典加载到列表 D 中。
- 对于输入巨大文件的每一行
- 将其拆分为单词,使这个小列表变得独一无二。让这是W。
- 计算两个列表 W 和 D 的交集。
- 如果其长度与W的长度相同,则该行不包含未知单词。
关于python - 删除所有包含字典中未包含单词的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22416024/