Python 中的程序不匹配相同的词
Program in Python doesn't match equal words
我有一个列表,其中包含一些我想在文本中查找的 4-grams,但我在处理一些带有重音的单词时遇到了问题。
例如,假设我们的 4-gram 列表是
Quad = [(u'Jogos', u'Olímpicos', u'de', u'Verão'), (u'Jogos', u'Olímpicos', u'de', u'Inverno'), (u'Jogos', u'Olímpicos', u'de', u'Sidney')]
我有一个用于测试的小文本:
'Tasha fez parte da equipe norte americana que disputou os Jogos Olímpicos de Sidney em 2000 na Austrália'
但我无法将文本中的 'Jogos Olímpicos de Sidney' 与我的 4 克中的匹配。
我尝试了一些东西,
首先:
我做了第二个列表 Quad2 = [u'Jogos_Ol\xedmpicos_de_Ver\xe3o', u'Jogos_Ol\xedmpicos_de_Inverno', u'Jogos_Ol\xedmpicos_de_Sidney']
这就是输出,如果我执行 Quad2[2],我会得到 Jogos_Olímpicos_de_Sidney
当我尝试时
while i < (len(test) - 3):
if (test[i] + '_' + test[i+1] + '_' + test[i+2] + '_' + test[i+3]) in Quad2:
print test[i]
它不打印任何东西。
第二个:
while k< len(test)-3:
for i in range(3):
if test[k] == Quad[i][0] and test[k+1] == Quad[i][1] and test[k+2] == Quad[i][2] and test[k+3] == Quad[i][3]:
print test[k]
k = k+1
对于没有重音的单词,这两种方法都是单词,但像 'Olímpicos' 这样的单词不是。有什么想法吗?
据我所知,这不是口音问题。 Python 具有连接字符串和从字符串中查找子字符串的方法。如果可能的话,最好使用那些。
test = u'Tasha fez parte da equipe norte americana que disputou os Jogos Olímpicos de Sidney em 2000 na Austráli'
quads = [(u'Jogos', u'Olímpicos', u'de', u'Verão'),
(u'Jogos', u'Olímpicos', u'de', u'Inverno'),
(u'Jogos', u'Olímpicos', u'de', u'Sidney')]
for quad in quads:
x = u' '.join(quad)
res = test.find(x)
if res >= 0:
print("Found:", test[res:res+len(x)])
您需要打开您的测试文件才能将其读取为 Unicode:
import codecs
f = codecs.open('/home/portugues/teste.txt', encoding='utf-8')
test = f.read().split(' ')
我有一个列表,其中包含一些我想在文本中查找的 4-grams,但我在处理一些带有重音的单词时遇到了问题。
例如,假设我们的 4-gram 列表是
Quad = [(u'Jogos', u'Olímpicos', u'de', u'Verão'), (u'Jogos', u'Olímpicos', u'de', u'Inverno'), (u'Jogos', u'Olímpicos', u'de', u'Sidney')]
我有一个用于测试的小文本:
'Tasha fez parte da equipe norte americana que disputou os Jogos Olímpicos de Sidney em 2000 na Austrália'
但我无法将文本中的 'Jogos Olímpicos de Sidney' 与我的 4 克中的匹配。
我尝试了一些东西,
首先:
我做了第二个列表 Quad2 = [u'Jogos_Ol\xedmpicos_de_Ver\xe3o', u'Jogos_Ol\xedmpicos_de_Inverno', u'Jogos_Ol\xedmpicos_de_Sidney']
这就是输出,如果我执行 Quad2[2],我会得到 Jogos_Olímpicos_de_Sidney
当我尝试时
while i < (len(test) - 3):
if (test[i] + '_' + test[i+1] + '_' + test[i+2] + '_' + test[i+3]) in Quad2:
print test[i]
它不打印任何东西。
第二个:
while k< len(test)-3:
for i in range(3):
if test[k] == Quad[i][0] and test[k+1] == Quad[i][1] and test[k+2] == Quad[i][2] and test[k+3] == Quad[i][3]:
print test[k]
k = k+1
对于没有重音的单词,这两种方法都是单词,但像 'Olímpicos' 这样的单词不是。有什么想法吗?
据我所知,这不是口音问题。 Python 具有连接字符串和从字符串中查找子字符串的方法。如果可能的话,最好使用那些。
test = u'Tasha fez parte da equipe norte americana que disputou os Jogos Olímpicos de Sidney em 2000 na Austráli'
quads = [(u'Jogos', u'Olímpicos', u'de', u'Verão'),
(u'Jogos', u'Olímpicos', u'de', u'Inverno'),
(u'Jogos', u'Olímpicos', u'de', u'Sidney')]
for quad in quads:
x = u' '.join(quad)
res = test.find(x)
if res >= 0:
print("Found:", test[res:res+len(x)])
您需要打开您的测试文件才能将其读取为 Unicode:
import codecs
f = codecs.open('/home/portugues/teste.txt', encoding='utf-8')
test = f.read().split(' ')