Программа на Python не соответствует одинаковым словам

У меня есть список из 4 граммов, которые я хочу найти в тексте, но у меня проблемы с некоторыми словами с акцентами. Например, предположим, что наш 4-граммовый список равен 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'

Но я не могу сопоставить это «Олимпийские игры Сиднея» из текста с тем, что написано на моем 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

Со словами без ударения оба метода слова, но такие слова, как «Олимпикос», это не так. Есть предположения?


person Eliane Martins    schedule 14.01.2016    source источник
comment
Цитируется ли ваш тестовый текст буквой u для Unicode?   -  person Martin Broadhurst    schedule 14.01.2016
comment
У вас есть 3 разных варианта написания test, кстати (tes, test, teste)   -  person Martin Broadhurst    schedule 14.01.2016
comment
Нет, я только что сохранил это предложение в test.txt и открыл его так: data = /home/portugues/teste.txt f = open (data) f.seek (0) test = f.read (). Split ('')   -  person Eliane Martins    schedule 14.01.2016
comment
Убедитесь, что вы открываете файл в формате Unicode. Прочтите это: docs.python.org/2/howto/unicode.html   -  person Martin Broadhurst    schedule 14.01.2016
comment
Извините, первоначальное название было "teste", и я хотел изменить его на "test" здесь. Это сработало! Большое спасибо!!   -  person Eliane Martins    schedule 14.01.2016
comment
Прохладный. Не могли бы вы принять мой ответ ниже, чтобы мы знали, что это сделано? Спасибо!   -  person Martin Broadhurst    schedule 14.01.2016


Ответы (2)


Вам нужно открыть тестовый файл, чтобы прочитать его как Unicode:

import codecs
f = codecs.open('/home/portugues/teste.txt', encoding='utf-8')
test = f.read().split(' ') 
person Martin Broadhurst    schedule 14.01.2016

Насколько я понимаю, это не проблема с акцентами. В 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)])
person J.J. Hakala    schedule 14.01.2016