Что такое НЛП?
Обработка естественного языка (NLP) — это технология машинного обучения, которая дает компьютерам возможность интерпретировать, манипулировать и понимать человеческий язык.
Применение НЛП в реальной жизни
- Языковой перевод
- Анализ настроений
- Автозаполнение и автокоррекция
- Извлечение данных
- Распознавание речи
- Проверка орфографии
- Чат-боты
- Голосовые помощники
Библиотеки НЛП
Вложение слов
Если мы используем машинное обучение, то строку нельзя использовать, поэтому нам нужно выполнить встраивание слов, которое можно выполнить с помощью следующих методов.
- БЕРТ
- Просторный
- Перчатка
- Трансформеры
- Мешок слов (Count Vectorizer)
- TF-IDF
- Word2Vec
Шаги для предварительной обработки текста
- Очистите текст — удалите специальные символы, лишние пробелы, URL-адреса.
- Токенизация. Разбиение текста на более мелкие единицы называется токенами.
- Удалить стоп-слова — стоп-слова — это слова, которые не добавляют значения предложению. Например: есть, есть, тогда и т. д.
- Стемминг — используется для сокращения слов. Стемминг — это не что иное, как сокращение слов.
- Лемматизация — аналогична стеммингу, но полные значения слов приобретаются посредством лемматизации.
import nltk from nltk.tokenize import RegexpTokenizer from nltk.stem import WordNetLemmatizer,PorterStemmer from nltk.corpus import stopwords import re lemmatizer = WordNetLemmatizer() stemmer = PorterStemmer() def preprocess(sentence): sentence=str(sentence) sentence = sentence.lower() sentence=sentence.replace('{html}',"") #replace html tag url_removed=re.sub(r'http\S+', '',sentence) #remove the url numbers_removed = re.sub(r'[^a-zA-Z]', ' ', url_removed) #remove the special characters tokenizer = RegexpTokenizer(r'\w+') tokens = tokenizer.tokenize(numbers_removed) filtered_words = [w for w in tokens if len(w) > 2 if not w in stopwords.words('english')] stem_words=[stemmer.stem(w) for w in filtered_words] lemma_words=[lemmatizer.lemmatize(w) for w in stem_words] return " ".join(lemma_words) sentence="#$$Yesterday I watched one horror film and it was terrific 232 {html}, http//::dfdf" cleanText=preprocess(sentence) print(cleanText)
Вывод
Облако слов
Облако слов — это в основном метод визуализации для представления частоты слов в тексте, где размер слова представляет его частоту.
#Wordcloud from stop_words import get_stop_words import re import nltk from matplotlib import pyplot as plt import seaborn as sns from nltk.tokenize import word_tokenize import pandas as pd top_200 = 200 #Read the data data=pd.read_csv('review.csv') lower_data = data['Review'].str.lower().str.cat(sep=' ') #Concatenate # removes punctuation,numbers data_list = re.sub('[^A-Za-z0-9]', ' ', lower_data) #remove the stopwords stop_words = list(get_stop_words('english')) word_tokens = word_tokenize(data_list) filtered_sentence = [] for word in word_tokens: if word not in stop_words: filtered_sentence.append(word) #remove stopwords based on Custom stopwords stopwordlist = ['movie', 'film','one','really','just','can'] finalList=[] for j in filtered_sentence: if j not in stopwordlist: finalList.append(j) # Remove characters which have length less than 2 without_single_chr = [word for word in filtered_sentence if len(word) > 2] # Calculate frequency distribution word_dist = nltk.FreqDist(without_single_chr) #choose top 200 words result = pd.DataFrame(word_dist.most_common(top_200), columns=['Word', 'Frequency']) #plot plt.figure(figsize=(10,10)) sns.set_style("whitegrid") ax = sns.barplot(x="Word",y="Frequency", data=result.head(20))
Вывод
Анализ настроений
Мы собираемся использовать библиотеку TextBlob для анализа настроений. TextBlob — это библиотека Python для обработки естественного языка (NLP). TextBlob активно использовал Natural Language ToolKit (NLTK) для решения своих задач. TextBlob возвращает полярность и субъективность предложения. Полярность находится между [-1,1], -1 определяет отрицательное настроение, а 1 определяет положительное настроение, а полярность между [-2,2] можно считать нейтральной.
Пример
from textblob import TextBlob a = TextBlob("I read the book ' Think like a monk' and the book was so good") a.sentiment
Вывод
Отношение к набору данных
from textblob import TextBlob import pandas as pd df=pd.read_csv('review.csv') df[['polarity', 'subjectivity']] = df['Review'].apply(lambda Text: pd.Series(TextBlob(Text).sentiment)) def analysis(score): if score < -0.2: return 'Negative' elif ((score > -0.2) and (score<0.2)): return 'Neutral' else: return 'Positive' df['Analysis'] = df['polarity'].apply(analysis) import matplotlib.pyplot as plt import seaborn as sns #loading the dataset 'tips' #plotting the graph sns.countplot(x='Analysis',data=df) plt.show()
Вывод
Полный исходный код на GitHub: https://github.com/DharmarajPi/NLP
Спасибо, что читаете мой блог, вы можете проверить другие мои блоги…
Есть сомнения? Нужна помощь? Свяжитесь со мной!