删除词典中不包含单词的所有行

2024-05-14 19:13:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本英语单词词典

我有一大堆句子,一行一行。我试着把这些奇怪的句子用外来词和外来词对照一下,把它们和字典比较一下。在

Master.txt
Thanks to Your Greatness (谢谢你的美好)
Himatnagar has a small Railway Station
Pu$haz Ink

有人能帮忙吗?我尝试过使用diff,但它只能在单词级别进行比较,而不能在句子级别进行比较


Tags: tomastertxtyour字典级别句子词典
3条回答

如果你不介意的话:

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将打印该行,因为它是真的。在

你想要这样的东西:

英语句子-仅.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))
^{pr2}$

你需要分阶段进行。在

首先,使用tr(或者也许是sed-稍微慢一点但更灵活,允许更精确地删除标点符号等),将句子文件分为单词:

tr " " "\n" < hugefile | sort | uniq | grep -v -F -f dictionary > blacklist.txt

-i选项添加到grep以实现不区分大小写(请参阅Scott的评论)。在

然后使用uniq收集唯一单词,使用grep -v -F -f dictionary获取字典中所有不是的单词。在

一旦你有了这个“黑名单”,你就可以要求黑名单中不包含任何单词的所有行。或者,您可能想再次考虑大写/小写:

^{pr2}$

在Python中,您可以以更有效的方式遵循相同的方法:

  • 把字典装入列表D
  • 对于输入hugefile的每一行
    • 把它分成几个字,让这个小清单独一无二。就这样吧
    • 计算两个列表W和D的交集
    • 如果其长度与W的长度相同,则该行不包含未知单词。在

相关问题 更多 >

    热门问题