Введение в Text Mining на Python

Spread the love

Один из секретов успеха людей представляется в общении и распространении информацией с другими. Тут вступает в силу знания структуры языков. Однако в мире много языков. У каждого есть много стандартов и алфавитов, комбинация этих слов, организованных осмысленно, привела к формированию предложения. Каждый язык имеет свои собственные правила при создании этих предложений, этот набор правил также известен как грамматика.

В сегодняшнем мире, по оценкам отрасли, только 20 процентов данных генерируются в структурированном формате, когда мы говорим, пишем в Twitter, отправляя сообщения в WhatsApp, Email, Facebook, Instagram или любые текстовые сообщения. Большинство этих данных существует в текстовой форме, которая является крайне неструктурированной. Для того чтобы получить значимые данные из текста, нам нужно следовать методу, который называется Text Mining.

Что такое Text Mining?

Text Mining — это процесс извлечения значимой информации из текста на естественном языке.

Что такое NLP?

Natural Language Processing (NLP) — это область информатики и искусственного интеллекта, которая занимается человеческими языками.
Другими словами, NLP является компонентом интеллектуального анализа текста,  выполняющий особый вид лингвистического анализа, который по существу помогает машинному «чтению» текста. Он использует другую методологию для расшифровки неоднозначностей в человеческом языке, включая следующие: автоматическое суммирование, разметка части речи, устранение неоднозначности, разбиение на фрагменты, а также устранение неоднозначности и понимание, распознавание естественного языка. Мы увидим все процессы пошагово, используя язык Python.

Во-первых, нам нужно установить библиотеку NLTK, которая является инструментарием для создания программ на Python для работы с данными на человеческом языке, а также предоставляет простой в использовании интерфейс.

Терминологии в NLP

Tokenization

Токенизация — это первый шаг в НЛП. Это процесс разбиения строк на токены, которые, в свою очередь, являются небольшими структурами или единицами. Токенизация включает в себя три шага, которые разбивают сложное предложение на слова, понимают важность каждого слова по отношению к предложению и наконец, создают структурное описание входного предложения.

# Importing necessary library
import pandas as pd
import numpy as np
import nltk
import os
import nltk.corpus
# sample text for performing tokenization
text = “In Brazil they drive on the right-hand side of the road. Brazil has a large coastline on the eastern
side of South America"
# importing word_tokenize from nltk
from nltk.tokenize import word_tokenize
# Passing the string text into word tokenize for breaking the sentences
token = word_tokenize(text)
token

Вывод:

['In','Brazil','they','drive', 'on','the', 'right-hand', 'side', 'of', 'the', 'road', '.', 'Brazil', 'has', 'a', 'large', 'coastline', 'on', 'the', 'eastern', 'side', 'of', 'South', 'America']

Из вышеприведенного вывода мы можем увидеть текст, разбитый на токены. Слова, запятая, знаки препинания называются токенами.

Нахождение частоты слов в тексте

# finding the frequency distinct in the tokens
# Importing FreqDist library from nltk and passing token into FreqDist
from nltk.probability import FreqDist
fdist = FreqDist(token)
fdist

Вывод

FreqDist({'the': 3, 'Brazil': 2, 'on': 2, 'side': 2, 'of': 2, 'In': 1, 'they': 1, 'drive': 1, 'right-hand': 1, 'road': 1, ...})

‘the’  встречается 3 раза в тексте, ‘Brazil’ два раза и т. д.

# To find the frequency of top 10 words
fdist1 = fdist.most_common(10)
fdist1

Вывод

[('the', 3),
 ('Brazil', 2),
 ('on', 2),
 ('side', 2),
 ('of', 2),
 ('In', 1),
 ('they', 1),
 ('drive', 1),
 ('right-hand', 1),
 ('road', 1)]

Стемминг

Stemming

Стемминг обычно относится к нормализации слов в их базовую или корневую форму.

Например у нас есть слова «waited», «waiting», здесь «корневое» слово «wait». В стемминге есть два метода, а именно: Porter Stemming (метод Портера) , удаляет общие морфологические и флективные окончания в словах и Lancaster Stemming (метод Ланкастера), более агрессивный алгоритм стемминга.

# Importing Porterstemmer from nltk library
# Checking for the word ‘giving’ 
from nltk.stem import PorterStemmer
pst = PorterStemmer()
pst.stem(“waiting”)

Вывод

'wait'
# Checking for the list of words
stm = ["waited", "waiting", "waits"]
for word in stm :
   print(word+ ":" +pst.stem(word))

Вывод

waited:wait
waiting:wait
waits:wait
# Importing LancasterStemmer from nltk
from nltk.stem import LancasterStemmer
lst = LancasterStemmer()
stm = [“giving”, “given”, “given”, “gave”]
for word in stm :
 print(word+ “:” +lst.stem(word))

Вывод

giving:giv
given:giv
given:giv
gave:gav

Метод Ланкастера более агрессивен, чем Портера

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

Lemmatization

Проще говоря, это процесс преобразования слова в его базовую форму. Разница между стеммингом и лемматизацией заключается в том, что лемматизация учитывает контекст и преобразует слово в его значимую базовую форму, тогда как стемминг просто удаляет последние несколько символов, что часто приводит к неверному значению и орфографическим ошибкам.
Например, лемматизация правильно определила бы базовую форму «caring» и «care», в то время как стеммирование отрезало бы «ing» часть и преобразовало бы ее в car.
Лемматизация может быть реализована в python с использованием Wordnet Lemmatizer, Spacy Lemmatizer, TextBlob, Stanford CoreNLP

# Importing Lemmatizer library from nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer() 
 
print(“rocks :”, lemmatizer.lemmatize(“rocks”)) 
print(“corpora :”, lemmatizer.lemmatize(“corpora”))
rocks : rock
corpora : corpus

Стоп слова

Наиболее популярные стоп слова в английском языке: “the”, “a”, “at”, “for”, “above”, “on”, “is”, “all”. Эти слова не несут смысловую нагрузку и могут быть удалены из текста. Мы можем удалить их с помощью NLTK библиотеки.

# importing stopwors from nltk library
from nltk import word_tokenize
from nltk.corpus import stopwords
a = set(stopwords.words(‘english’))
text = “Cristiano Ronaldo was born on February 5, 1985, in Funchal, Madeira, Portugal.”
text1 = word_tokenize(text.lower())
print(text1)
stopwords = [x for x in text1 if x not in a]
print(stopwords)

Вывод

Output of text:
['cristiano', 'ronaldo', 'was', 'born', 'on', 'february', '5', ',', '1985', ',', 'in', 'funchal', ',', 'madeira', ',', 'portugal', '.']
Output of stopwords:
['cristiano', 'ronaldo', 'born', 'february', '5', ',', '1985', ',', 'funchal', ',', 'madeira', ',', 'portugal', '.']

Пометка части речи (POS)

Part-of-speech tagging

Пометка части речи используется для присвоения частей речи каждому слову данного текста (таким как существительные, глаголы, местоимения, наречие, союз, прилагательные, междометия) на основе его определяется контекст. Есть много инструментов, доступных для POS-тегирования, некоторые из широко используемых — это NLTK, Spacy, TextBlob, Standford CoreNLP и т. д.

text = “vote to choose a particular man or a group (party) to represent them in parliament”
#Tokenize the text
tex = word_tokenize(text)
for token in tex:
print(nltk.pos_tag([token]))

Вывод

[('vote', 'NN')]
[('to', 'TO')]
[('choose', 'NN')]
[('a', 'DT')]
[('particular', 'JJ')]
[('man', 'NN')]
[('or', 'CC')]
[('a', 'DT')]
[('group', 'NN')]
[('(', '(')]
[('party', 'NN')]
[(')', ')')]
[('to', 'TO')]
[('represent', 'NN')]
[('them', 'PRP')]
[('in', 'IN')]
[('parliament', 'NN')]

Named entity recognition

Named entity recognition

Это процесс обнаружения именованных объектов, таких как имя человека, название места, название компании, количество и денежная стоимость.

text = “Google’s CEO Sundar Pichai introduced the new Pixel at Minnesota Roi Centre Event”
#importing chunk library from nltk
from nltk import ne_chunk
# tokenize and POS Tagging before doing chunk
token = word_tokenize(text)
tags = nltk.pos_tag(token)
chunk = ne_chunk(tags)
chunk
Tree('S', [Tree('GPE', [('Google', 'NNP')]), ("'s", 'POS'), Tree('ORGANIZATION', [('CEO', 'NNP'), ('Sundar', 'NNP'), ('Pichai', 'NNP')]), ('introduced', 'VBD'), ('the', 'DT'), ('new', 'JJ'), ('Pixel', 'NNP'), ('at', 'IN'), Tree('ORGANIZATION', [('Minnesota', 'NNP'), ('Roi', 'NNP'), ('Centre', 'NNP')]), ('Event', 'NNP')])

Chunking

nlp chunking

Разделение на части означает сбор отдельных фрагментов информации и группирование их в более крупные фрагменты. В контексте NLP и интеллектуального анализа текста разбиение на фрагменты означает группирование слов или токенов в фрагменты.

text = “We saw the yellow dog”
token = word_tokenize(text)
tags = nltk.pos_tag(token)
reg = “NP: {<DT>?<JJ>*<NN>}” 
a = nltk.RegexpParser(reg)
result = a.parse(tags)
print(result)
(S We/PRP saw/VBD (NP the/DT yellow/JJ dog/NN))

Эта статья освещает предварительную обработку текста и охватывает этапы NLTK, в том числе токенизацию, stemming, лемматизацию, тегирование POS, распознавание именованных объектов и chunking.
Спасибо за прочтение. Продолжайте учиться и следите за обновлениями!

Dhilip Subramanian. Text Mining in Python: Steps and Examples

 

Добавить комментарий