Стемминг

Стемминг — это процесс сокращения слов до тех пор, пока не будет достигнута основа/основное слово. Он обрезает буквы с конца. При поиске по определенному ключевому слову он возвращает определенные варианты слова из документа.

Например: при поиске по слову «лодка» возвращается лодка, канотье, лодка и т. д.

Здесь основой слова является лодка, и суффиксы удаляются до тех пор, пока не будет достигнута основа слова.

Существует 2 типа стеммеров:

  • Портер Стеммер
  • Снежок Стеммер

Портер Стеммер:

Один из самых распространенных и эффективных инструментов стемминга. Он проходит пять фаз сокращения слов.

from nltk.stem.porter import PorterStemmer
p_stemmer = PorterStemmer()
words = ['run', 'runner', 'ran', 'runs', 'easily', 'fairly', 'fairness']
for word in words:
    print(word + '---->' + p_stemmer.stem(word))
print("\n")

OUTPUT:
run---->run
runner---->runner
ran---->ran
runs---->run
easily---->easili
fairly---->fairli
fairness---->fair

Снежок Стеммер:

Это улучшение стеммера Портера с точки зрения скорости и точности.

from nltk.stem.snowball import SnowballStemmer
p_stemmer = PorterStemmer()
words = ['run', 'runner', 'ran', 'runs', 'easily', 'fairly', 'fairness']
for word in words:
    print(word + '---->' + p_stemmer.stem(word))
print("\n")

OUTPUT: 
run---->run
runner---->runner
ran---->ran
runs---->run
easily---->easili
fairly---->fairli
fairness---->fair

Лемматизация

Лемматизационный анализ структуры слов. Это более полезно и информативно, чем стемминг. Он анализирует окружающие слова для определения позиции (части речи) слова.

import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(u'I am a runner running in a race because i love to run since i ran today')
for token in doc:
    print(f'{token.text:{12}} {token.pos:{6}} {token.lemma:<{22}} {token.lemma_}')
show_lemmas(doc)


OUTPUT:
I                95 4690420944186131903    I
am               87 10382539506755952630   be
a                90 11901859001352538922   a
runner           92 12640964157389618806   runner
running         100 12767647472892411841   run
in               85 3002984154512732771    in
a                90 11901859001352538922   a
race             92 8048469955494714898    race
because          98 16950148841647037698   because
i                95 4690420944186131903    I
love            100 3702023516439754181    love
to               94 3791531372978436496    to
run             100 12767647472892411841   run
since            98 10066841407251338481   since
i                95 4690420944186131903    I
ran             100 12767647472892411841   run
today            92 11042482332948150395   today

Стоп-слова

Стоп-слова — это часто встречающиеся слова, которые не требуют тегирования. Таким образом, они отфильтровываются из текста, подлежащего обработке. Это часто используемые существительные и глаголы, такие как is, the, a и т. д.

Стоп-слова по умолчанию:
Мы также можем получить длину стоп-слов, установленных по умолчанию, с помощью функции len().

import spacy
nlp = spacy.load('en_core_web_sm')

# Print the set of spaCy's default stop words:
print(nlp.Defaults.stop_words)

print(f"\n Length of default stop words is: {len(nlp.Defaults.stop_words)}")

OUTPUT:
{"'d", "'ll", "'m", "'re", "'s", "'ve", 'a',.. '’ll', '’m', '’re', '’s', '’ve'}

Length of default stop words is: 326

Проверьте, является ли слово стоп-словом или нет:
Чтобы проверить, является ли конкретное слово стоп-словом или нет, мы можем проверить это с помощью is_stop.

#Checks in entire set
nlp.vocab['is'].is_stop  
nlp.vocab['mystery'].is_stop

OUTPUT:
True
False

Добавить стоп-слово:
Мы можем добавить новое стоп-слово в набор стоп-слов по умолчанию.

nlp.Defaults.stop_words.add('btw')
nlp.vocab['btw'].is_stop

OUTPUT:
True

Удалить стоп-слово:
Мы можем удалить слово из значений по умолчанию и проверить, было ли оно удалено.

nlp.Defaults.stop_words.remove('beyond')
nlp.vocab['beyond'].is_stop

OUTPUT:
False

Найдите мой исходный код для этой статьи

Стэминг



Лемматизация



Стоп-слова



«NLP-NaturalLanguageProcessing/stop_words.ipynb в основном ·…
Внесите свой вклад в разработку Shreya-khandelwal/NLP-NaturalLanguageProcessing, создав учетную запись на GitHub.github.com ""Икс"



Обо мне

Я Шрея Хандельвал, специалист по данным. Не стесняйтесь связаться со мной в LinkedIn!

Следуйте за мной на канале Medium, чтобы получать регулярные обновления по аналогичным темам.