我想比较两个采用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包含一个句子:
وفاقی وزیر اطلاعات فواد چودھری سے استعفیٰ لے لیا**ابالنا** گیا ہے
我要在两个文件中找到它们并计算它们的出现,这两个词很常见。 我希望它应该返回类似的单词,但是它返回一个错误,指出ValueError:太多值无法解包(预期2)
答案 0 :(得分:0)
您正在尝试从split
中检索两个值:
word, freq = line.split()
这仅在一行上刚好有两个词时才起作用(通过变量命名,第二个词显然应该是频率计数)。
另一个问题是,print
占用了第一个文件中的所有行。一旦从句柄中读取了所有行,尝试读取更多行将仅不返回任何内容。简单的解决方法是将每个输入字打印并保存到同一循环内设置的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)