尝试比较两个 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)
我想比较两个 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)