Существуют ли в NLTK классы для нормализации и канонизации текста? - программирование
Подтвердить что ты не робот

Существуют ли в NLTK классы для нормализации и канонизации текста?

Распространенное количество документации и примеров NLTK посвящено леммитизации и истощению, но очень редко по таким вопросам нормализации, как:

  • преобразование всех букв в нижний или верхний регистр
  • удаление пунктуации
  • преобразование чисел в слова
  • удаление знаков акцента и других диакритических знаков
  • расширения сокращений
  • удаление стоп-слов или "слишком распространенных" слов
  • канонизация текста (опухоль = опухоль, это = она)

Пожалуйста, укажите мне, где в NLTK копать. Любые эквиваленты NLTK (JAVA или любые другие) для вышеупомянутых целей приветствуются. Спасибо.

UPD. Я написал библиотеку python для нормализации текста для целей преобразования текста в речь https://github.com/soshial/text-normalization. Это может вам подойдет.

4b9b3361

Ответ 1

Также в спецификации NLTK множество (под) задач решаются с использованием чисто python methods.

a) преобразование всех букв в нижний или верхний регистр

text='aiUOd'
print text.lower()
>> 'aiuod'
print text.upper()
>> 'AIUOD'

b) удаление пунктуации

text='She? Hm, why not!'
puncts='.?!'
for sym in puncts:
    text= text.replace(sym,' ')
print text
>> 'She  Hm  why not '

c) преобразование чисел в слова

Здесь было бы не то, что wasy написать несколькоliner, но есть много уже существующих решений, если вы google это. фрагменты кода, библиотеки и т.д.

d) удаление меток и других диакритических знаков

искать точку b), просто создайте список с диакритикой как puncts

e) расширение аббревиатур

Создайте словарь с сокращениями:

text='USA and GB are ...'
abbrevs={'USA':'United States','GB':'Great Britain'}
for abbrev in abbrevs:
    text= text.replace(abbrev,abbrevs[abbrev])
print text
>> 'United States and Great Britain are ...'

f) удаление стоп-слов или "слишком распространенных" слов

Создайте список со стоп-словами:

text='Mary had a little lamb'
temp_corpus=text.split(' ')
stops=['a','the','had']
corpus=[token for token in temp_corpus if token not in stops]
print corpus
>> ['Mary', 'little', 'lamb']

g) канонизация текста (опухоль = опухоль, это = она)

для использования опухоли → опухоль regex.

Наконец, но не в последнюю очередь, обратите внимание, что все приведенные выше примеры обычно требуют калибровки на реальных текстах, я написал их как направление.

Ответ 2

Я предлагаю использовать stopwords.words() для удаления паузы. Поддерживает следующие языки: датский, голландский, английский, французский, немецкий, итальянский, норвежский, португальский, русский, испанский, шведский.

Ответ 3

Возможно, я немного опоздал, но это может быть полезно. Вот стоп-слова для некоторых языков (английский, французский, немецкий, финский, венгерский, турецкий, русский, чешский, греческий, арабский, китайский, японский, корейский, каталонский, польский, иврит, норвежский, шведский, итальянский, португальский и испанский ): https://pypi.python.org/pypi/many-stop-words