实现文本预处理
在下面的python代码中,我们从Twitter情感分析数据集的原始文本数据中去除噪音。之后,我们将进行删除停顿词、干化和词法处理。
导入所有的依赖性。
! pip install contractions
import nltk
import contractions
import inflect
from nltk import word_tokenize, sent_tokenize
from nltk.corpus import stopwords
from nltk.stem import LancasterStemmer, WordNetLemmatizer
from bs4 import BeautifulSoup
import re, string, unicodedata
复制代码
去除噪音。
第一步是去除数据中的噪音;在文本领域,噪音是指与人类语言文本无关的东西,这些东西具有各种性质,如特殊字符、小括号的使用、方括号的使用、空白、URL和标点符号。
下面是我们正在处理的样本文本。
正如你所看到的,首先有许多HTML标签和一个URL;我们需要删除它们,为此,我们使用BeautifulSoup。下面的代码片段将这两者都删除了。
# to remove HTML tag
def html_remover(data):
beauti = BeautifulSoup(data,'html.parser')
return beauti.get_text()
# to remove URL
def url_remover(data):
return re.sub(r'https\S','',data)
def web_associated(data):
text = html_remover(data)
text = url_remover(text)
return text
new_data = web_associated(data)
复制代码
在去除HTML标签和URL后,仍有一些标点符号和空白的噪音,以及括号内的文本数据;这也需要被处理。
def remove_round_brackets(data):
return re.sub('\(.*?\)','',data)
def remove_punc(data):
trans = str.maketrans('','', string.punctuation)
return data.translate(trans)
def white_space(data):
return ' '.join(data.split())
def complete_noise(data):
new_data = remove_round_brackets(data)
new_data = remove_punc(new_data)
new_data = white_space(new_data)
return new_data
new_data = complete_noise(new_data)
复制代码
现在,正如你所看到的,我们已经成功地去除文本中的所有噪音。
对文本进行规范化处理。
通常情况下,文本规范化首先要对文本进行标记,我们较长的语料现在要被分割成若干个词块,NLTK的标记器类可以做到这一点。之后,我们需要对语料库中的每个单词进行小写,将数字转换为单词,最后进行缩略语替换。
def text_lower(data):
return data.lower()
def contraction_replace(data):
return contractions.fix(data)
def number_to_text(data):
temp_str = data.split()
string = []
for i in temp_str:
# if the word is digit, converted to
# word else the sequence continues
if i.isdigit():
temp = inflect.engine().number_to_words(i)
string.append(temp)
else:
string.append(i)
return temp_str
def normalization(data):
text = text_lower(data)
text = number_to_text(text)
text = contraction_replace(text)
nltk.download('punkt')
tokens = nltk.word_tokenize(text)
return tokens
tokens = normalization(new_data)
print(tokens)
复制代码
现在,我们已经接近基本文本预处理的尾声;现在,我们只剩下一件重要的事情:停止词。在分析文本数据时,停顿词根本没有意义;它只是用于装饰性目的。因此,为了进一步降低维度,有必要将停顿词从语料库中删除。
最后,我们有两种选择,即用词干化或词组化的形式来表示我们的语料库。词干化通常试图将单词转换为其词根格式,而且大多是通过简单地切割单词来进行。而词根化也是做干化的任务,但以适当的方式意味着它将单词转换为词根格式,如’scenes’将被转换为’scene’。人们可以在词干化和词缀化之间进行选择。
def stopword(data):
nltk.download('stopwords')
clean = []
for i in data:
if i not in stopwords.words('english'):
clean.append(i)
return clean
def stemming(data):
stemmer = LancasterStemmer()
stemmed = []
for i in data:
stem = stemmer.stem(i)
stemmed.append(stem)
return stemmed
def lemmatization(data):
nltk.download('wordnet')
lemma = WordNetLemmatizer()
lemmas = []
for i in data:
lem = lemma.lemmatize(i, pos='v')
lemmas.append(lem)
return lemmas
def final_process(data):
stopwords_remove = stopword(data)
stemmed = stemming(stopwords_remove)
lemm = lemmatization(stopwords_remove)
return stemmed, lemm
stem,lemmas = final_process(tokens)
复制代码
下面我们可以看到经过词干化和词缀化的单词。
结语。
在这篇文章中,我们讨论了文本的预处理对模型的建立是如何必要的。从一开始,我们就学会了如何去除HTML标签,并从URL中去除噪音。首先,为了去除噪音,我们必须对我们的语料库进行概述,以定制噪音成分。我们已经观察到在词干化和词条化之间的巨大权衡,我们应该始终使用词条化的词。
最后
如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star:http://github.crmeb.net/u/defu不胜感激 !
免费获取源码地址:http://ym.baisouvip.cn/html/wzym/36.html
PHP学习手册:https://doc.crmeb.com
技术交流论坛:https://q.crmeb.com
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)