尝试比较两个 UTF-8 编码的文本文件以查找和计算相似的单词

Trying to compare two text files in UTF-8 encoding to find and count similar words

我想比较两个 UTF-8 编码的文本文件,文件 1 是一个单词词典,文件 2 包含一个句子。我想找出文件 1 和文件 2 中存在的相似词。

import codecs
f1 = codecs.open('poswords.txt', 'r', 'UTF-8')
for line in f1:
    print(line)
f2 = codecs.open('0001b.txt', 'r', 'UTF-8')
words=set(line.strip() for line in f1)
for line in f2:
    word,freq =line.split()
    if word in words:
        print (word)

文件 1(即词典)包含

کرخت
ناجائز فائدہ
آب دیدہ
ابال
ابال کر پکانا
**ابالنا**
ابتدائ
ابتر

文件 2 包含一句话:

وفاقی وزیر اطلاعات فواد چودھری سے استعفیٰ لے لیا**ابالنا** گیا ہے

这两个文件中都有两个常用词,我想找到它们并计算它们的出现次数。 我希望它应该 return 相似的词,但它 return 是一个错误,指出 ValueError: too many values to unpack (expected 2)

您正在尝试从 split 中检索两个值:

word, freq = line.split()

这仅在一行中恰好有两个单词时有效(并且根据变量命名,第二个显然应该是频率计数)。

另一个问题是,当您 print 时,您会消耗掉第一个文件中的所有行。从句柄读取所有行后,尝试读取更多行只会 return 什么都没有。简单的解决方法是在同一个循环中打印每个输入词并将其保存到 words 集。 (也许注释掉 print(),实际上;或 import logging 并将其更改为 logging.debug()。这也确保诊断输出不会与程序的常规标准输出混合。)

在 Python 3 中,UTF-8 应该是大多数理智平台上的默认编码(尽管这明显而强调地排除了 Windows);也许您根本不需要明确的 codecs

最后,您应该知道 Unicode 通常可以用多种方式表示同一个字符串。我不读阿拉伯语,但简而言之,例如,您可以将 "salaam" 写成单个字形 U+FDF5,也可以将其拼写出来。 Unicode 规范化试图消除任何此类皱纹,因此您可以确保显示相同的文本也写成相同的,因此与 Python 的字符串比较运算符相同。

import codecs
import unicodedata

with codecs.open('poswords.txt', 'r', 'UTF-8') as f1:
    words = set()
    for line in f1:
        print(line)
        words.add(unicodedata.normalize('NFC', line.strip()))

with codecs.open('0001b.txt', 'r', 'UTF-8') as f2:
    for line in f2:
        for word in line.split():
            if unicodedata.normalize('NFC', word) in words:
                print (word)