Стемминг
Стемминг — это процесс сокращения слов до тех пор, пока не будет достигнута основа/основное слово. Он обрезает буквы с конца. При поиске по определенному ключевому слову он возвращает определенные варианты слова из документа.
Например: при поиске по слову «лодка» возвращается лодка, канотье, лодка и т. д.
Здесь основой слова является лодка, и суффиксы удаляются до тех пор, пока не будет достигнута основа слова.
Существует 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, чтобы получать регулярные обновления по аналогичным темам.