Что такое НЛП?

Обработка естественного языка (NLP) — это технология машинного обучения, которая дает компьютерам возможность интерпретировать, манипулировать и понимать человеческий язык.

Применение НЛП в реальной жизни

  • Языковой перевод
  • Анализ настроений
  • Автозаполнение и автокоррекция
  • Извлечение данных
  • Распознавание речи
  • Проверка орфографии
  • Чат-боты
  • Голосовые помощники

Библиотеки НЛП

Вложение слов

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

  1. БЕРТ
  2. Просторный
  3. Перчатка
  4. Трансформеры
  5. Мешок слов (Count Vectorizer)
  6. TF-IDF
  7. Word2Vec

Шаги для предварительной обработки текста

  1. Очистите текст — удалите специальные символы, лишние пробелы, URL-адреса.
  2. Токенизация. Разбиение текста на более мелкие единицы называется токенами.
  3. Удалить стоп-слова — стоп-слова — это слова, которые не добавляют значения предложению. Например: есть, есть, тогда и т. д.
  4. Стемминг — используется для сокращения слов. Стемминг — это не что иное, как сокращение слов.
  5. Лемматизация — аналогична стеммингу, но полные значения слов приобретаются посредством лемматизации.
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

Спасибо, что читаете мой блог, вы можете проверить другие мои блоги…









Есть сомнения? Нужна помощь? Свяжитесь со мной!

LinkedIn: https://www.linkedin.com/in/dharmaraj-d-1b707898

GitHub:https://github.com/DharmarajPi