关于NLP中的文本预处理的完整教程

实现文本预处理
在下面的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和标点符号。

下面是我们正在处理的样本文本。

关于NLP中的文本预处理的完整教程_第1张图片

正如你所看到的,首先有许多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)
复制代码

关于NLP中的文本预处理的完整教程_第2张图片

现在,正如你所看到的,我们已经成功地去除文本中的所有噪音。

对文本进行规范化处理。

通常情况下,文本规范化首先要对文本进行标记,我们较长的语料现在要被分割成若干个词块,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)
复制代码

关于NLP中的文本预处理的完整教程_第3张图片

现在,我们已经接近基本文本预处理的尾声;现在,我们只剩下一件重要的事情:停止词。在分析文本数据时,停顿词根本没有意义;它只是用于装饰性目的。因此,为了进一步降低维度,有必要将停顿词从语料库中删除。

最后,我们有两种选择,即用词干化或词组化的形式来表示我们的语料库。词干化通常试图将单词转换为其词根格式,而且大多是通过简单地切割单词来进行。而词根化也是做干化的任务,但以适当的方式意味着它将单词转换为词根格式,如’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)
复制代码

下面我们可以看到经过词干化和词缀化的单词。
关于NLP中的文本预处理的完整教程_第4张图片

结语。
在这篇文章中,我们讨论了文本的预处理对模型的建立是如何必要的。从一开始,我们就学会了如何去除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

你可能感兴趣的:(学习笔记,nlp,文本,预处理)