Обнаружение акцентов в словах (Python)


Вот в чем дело: я написал программу, которая находит все классы алгоритмов в словаре. Однако у меня возникли проблемы с акцентированными персонажами. В настоящее время мой код считывает их, обрабатывает, как будто они невидимы, но все равно выводит какой-то код замены в конце в виде ' xc3???". Я хотел бы отбросить все слова с акцентами, но я не знаю, как их распознать.

Вещи, которые я пробовал:

  • проверка, является ли тип unicode
  • использование регулярного выражения для проверки слов, содержащих 'xc3 '
  • декодирование / кодирование (я не совсем понимаю unicode, но все, что я пытался, не сработало).

Вопрос / проблема: мне нужно узнать, как определить акценты, но моя программа выводит акценты в командной строке как странные ' xc3???"символы, которые не так программа обрабатывает их, так как я не смог найти ни одного слова, содержащего" xc3???- несмотря на то, что это было напечатано командованию. линия.

Пример: sé - > sxc3xa9, а sé и s рассматриваются моей программой как анаграммы.

Тестовый словарь:

stop
tops
pots
hello
world
pit
tip
xc3xa9
sé
s
se

Вывод кода:

Found
xc3xa9
['pit', 'tip']
['world']
['sxc3xa9', 's']
['\xc3\xa9']
['stop', 'tops', 'pots']
['se']
['hello']

Сама программа:

import re

anadict = {};

for line in open('fakedic.txt'):#/usr/share/dict/words'):
        word = line.strip().lower().replace("'", "")
        line = ''.join(sorted(ch for ch in word if word if ch.isalnum($
        if isinstance(word, unicode):
                print word
                print "UNICODE!"
        pattern = re.compile(r'xc3')
        if pattern.findall(word):
               print 'Found'
               print word
        if anadict.has_key(line):
                if not (word in anadict[line]):
                        anadict[line].append(word)
        else:
                anadict[line] = [word]

for key in anadict:
        if (len(anadict[key]) >= 1):
                print anadict[key]

Помощь?

2 3

2 ответа:

Так что в основном поцарапайте мой ответ... Просто посмотрите сюда:

Как проверить, находится ли строка в Python в ASCII?

Суть в том, что вы можете проверить каждый символ, чтобы увидеть, если ord символа меньше 128, что позволяет проверить, если это символ с ударением. Или вы можете сделать много попыток и ловить, ища ошибки unicode, которые будут бросать во время акцентированных символов. (Последнее кажется более эффективным ответом)

Это определенно был опыт обучения для меня тоже :) извините, что так долго

В итоге я использовал регулярные выражения (в основном для проверки всего, что не было буквенным символом) с помощью:

if re.match('^[a-zA-Z_]+$', word):
Это помогло мне вычеркнуть любое слово, в котором было \ или любое другое число или фанковый символ. Не идеальное решение, но оно сработало.