Есть ли в НЛТК классы для нормализации и канонизации текста? - PullRequest
19 голосов
/ 10 февраля 2012

Преобладающее количество документации и примеров НЛТК посвящено лемматизации и основам, но очень мало в таких вопросах нормализации, как:

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

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

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

Ответы [ 3 ]

17 голосов
/ 10 февраля 2012

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

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) преобразование чисел в слова

Здесь это будетНе стоит тратить время на то, чтобы написать несколько лайнеров, но есть много уже существующих решений, если вы воспользуетесь им. Фрагменты кода , библиотеки и т. Д.

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

точка поиска b) , просто создайте список с диакритическими знаками в виде знаков препинания

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) канонизация текста(опухоль = опухоль, это = это так)

для опухоли-> использование опухоли регулярное выражение .

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

1 голос
/ 16 марта 2016

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

1 голос
/ 12 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...