1. Полный набор английского кода препроцессора
from nltk.corpus import stopwords as pw
import sys
import re
cacheStopWords=pw.words("english")
def English_processing(sentence):
if sentence:
sentence = sentence.lower()
for ch in "“”!?.\;'',()<>\{}/-1234567890$&#%~":
sentence = sentence.lower().replace(ch," ")
sentence=''.join([word+" " for word in sentence.split() if word not in cacheStopWords])
sentence=''.join([word+" " for word in sentence.split() if word not in ['br','w','b','bc']])
return sentence
2. Статистическая частотность слов + анализ облака слов
Частота слов в статистике
def concat_sentence(sen_list):
all_sen = ""
for i in sen_list:
all_sen+=' '
all_sen+=str(i)
return all_sen
def compute_word_fre(sentence):
if sentence:
word_fre ={}
sentence = English_processing(sentence)
words = sentence.strip().split()
for word in words :
word_fre[word]=word_fre.get(word,0)+1
return word_fre
def output(word_fre):
if word_fre:
sort_word = sorted(word_fre.items(),key =lambda s:s[1],reverse = True)
return sort_word
анализ облака слов
предложения_список — это ввод списка предложений
concat_sentence соединяет предложения вместе, чтобы сформировать артикль, а затем подсчитывает частоту слов
Если это непосредственно статья, первую строчку кода можно пропустить.
all_sen = concat_sentence(sentences_list)
word_fre = compute_word_fre(all_sen)
import matplotlib.pyplot as plt
from imageio import imread,imsave
from wordcloud import WordCloud, ImageColorGenerator, STOPWORDS
wordcloud = WordCloud(background_color='white',collocations=False,mask=imread('cloud.png',pilmode="RGB"),
max_words=30,random_state=2021,width=1200, height=800).fit_words(word_fre)
plt.imshow(wordcloud, interpolation='bilinear')
wordcloud.to_file("wordcloud.png")
3. Анализ настроений
NLTK
NLTK, полное название Natural Language Toolkit, набора инструментов для обработки естественного языка, представляет собой библиотеку Python, обычно используемую в области исследований НЛП.Это модуль, разработанный Стивеном Бердом и Эдвардом Лопером из Пенсильванского университета на основе Python. .код. Это проект с открытым исходным кодом, который содержит наборы данных, модули Python, учебные пособия и многое другое;
Анализ настроений в действии
import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer
sia = SentimentIntensityAnalyzer()
sentences = ['Hello, world. I am terrible']
for sentence in sentences:
print(sentence)
point = sia.polarity_scores(sentence)
print(point)
for k in sorted(point): print('{0}: {1}, '.format(k, point[k]), end='')
В-четвертых, анализ подобия (LDA, LSI, Tfidf)
полный код
from nltk.corpus import stopwords as pw
import sys
import re
cacheStopWords=pw.words("english")
def English_processing(sentence):
if sentence:
sentence = sentence.lower()
for ch in "“”!?.\;'',()<>\{}/-1234567890$&#%~":
sentence = sentence.lower().replace(ch," ")
sentence=''.join([word+" " for word in sentence.split() if word not in cacheStopWords])
sentence=''.join([word+" " for word in sentence.split() if word not in ['br','w','b','bc']])
return sentence
def concat_sentence(sen_list):
all_sen = ""
for i in sen_list:
all_sen+=' '
all_sen+=str(i)
return all_sen
import gc
import tqdm
import numpy as np
from gensim import corpora, models, similarities
from collections import defaultdict
import time
class SentenceSimilarity():
def __init__(self, sentences,min_frequency= 1):
self.sentences = []
for i in range(0, len(sentences)):
self.sentences.append(English_processing(sentences[i]))
self.sentences_num = len(self.sentences)
self.min_frequency = min_frequency
def get_cuted_sentences(self):
cuted_sentences = []
for sentence in self.sentences:
cuted_sentences.append(sentence.strip().split())
return cuted_sentences
def simple_model(self):
self.texts = self.get_cuted_sentences()
frequency = defaultdict(int)
for text in self.texts:
for token in text:
frequency[token] += 1
self.texts = [[token for token in text if frequency[token] > self.min_frequency] for text in self.texts]
self.dictionary = corpora.Dictionary(self.texts)
self.corpus_simple = [self.dictionary.doc2bow(text) for text in self.texts]
def TfidfModel(self):
self.simple_model()
self.model = models.TfidfModel(self.corpus_simple)
self.corpus = self.model[self.corpus_simple]
self.index = similarities.MatrixSimilarity(self.corpus)
def LsiModel(self):
self.simple_model()
self.model = models.LsiModel(self.corpus_simple)
self.corpus = self.model[self.corpus_simple]
self.index = similarities.MatrixSimilarity(self.corpus)
def LdaModel(self):
self.simple_model()
self.model = models.LdaModel(self.corpus_simple)
self.corpus = self.model[self.corpus_simple]
self.index = similarities.MatrixSimilarity(self.corpus)
def sentence2vec(self, sentence):
sentence = English_processing(sentence)
vec_bow = self.dictionary.doc2bow(sentence.strip().split())
return self.model[vec_bow]
def bow2vec(self):
vec = []
length = max(self.dictionary) + 1
for content in self.corpus:
sentence_vectors = np.zeros(length)
for co in content:
sentence_vectors[co[0]] = co[1]
vec.append(sentence_vectors)
return vec
def similarity(self, sentence):
sentence_vec = self.sentence2vec(sentence)
sims = self.index[sentence_vec]
sim = max(enumerate(sims), key=lambda item: item[1])
index = sim[0]
score = sim[1]
sentence = self.sentences[index]
return index,score
def similarity_k(self, sentence, k):
sentence_vec = self.sentence2vec(sentence)
t1 = time.time()
sims = self.index[sentence_vec]
t2 = time.time()
print('特征检索耗时:{:.4f}ms, 检索样本总数:{}'.format(t2-t1, self.sentences_num))
sim_k = sorted(enumerate(sims), key=lambda item: item[1], reverse=True)[:k]
indexs = [i[0] for i in sim_k]
scores = [i[1] for i in sim_k]
return indexs, scores
В этой статье используетсяПомощник по синхронизации статейСинхронизировать