使用nltk库进行文本清理的快速指南
NLTK是一个字符串处理库,它将字符串作为输入。输出采用字符串或字符串列表的形式。该库提供了大量算法,这些算法主要有助于学习目的。可以在不同的输出变式之间进行比较。还有其他库,例如spaCy,CoreNLP,PyNLPI,Polyglot。NLTK和spaCy使用最广泛。Spacy在处理大量信息和高级NLP方面效果很好。
为了理解基本的文本清理过程,我使用了非常适合学习的NLTK库。
从网站上抓取的数据大部分采用原始文本形式。在分析数据或为其拟合模型之前,需要清除此数据。清理文本数据对于突出显示您希望
机器学习系统使用的属性是必要的。清理(??或预处理)数据通常包括多个步骤。让我们开始清洁技术吧!
删除多余的空间
在大多数情况下,您所拥有的文本数据在句子之间或句子之前的单词之间可能包含多余的空格。因此,首先,我们将使用正则表达式从每个句子中删除这些多余的空格。
码:
汇入
doc =“ NLP是一个有趣的领域。”
new_doc = re.sub(“ s +”,“”,doc)
打印(new_doc)
2.删除标点符号
文本中出现的标点符号不会为数据增加价值。标点符号在附加到任何单词时,将在区分其他单词时产生问题。
码:
“我喜欢NLP。” =='我喜欢NLP'
可以使用正则表达式删除标点符号。
码:
text =“你好!你好吗!我很高兴你要去欧洲旅行!是的!”
re.sub(“ [^-9A-Za-z]”,“”,文本)
也可以通过使用字符串库中的包来删除标点符号。
码:
导入字符串
text =“你好!你好吗!我很高兴你要去欧洲旅行!是的!”
text_clean =“” .join([如果我不在string。标点中,则i在文本中为i]]
text_clean
3.案例规范化
在这种情况下,我们只需将文本中所有字符的大小写转换为大写或小写即可。由于python是区分大小写的语言,因此它将区别对待NLP和nlp。可以使用
str.lower()或str.upper()轻松地将字符串转换为大写或小写。
例如,您可以在检查标点符号时将字符转换为小写或大写。
码:
import string
text =“你好!你好吗!我很高兴你要去欧洲旅行!是的!”
text_clean =“” .join([如果我不在string。标点中,则在文本中为[i.lower()for i]]]
text_clean
4.标记化:将一个句子拆分成单词并创建一个列表,即每个句子都是一个单词列表。主要有3种类型的标记器。
一种。word_tokenize:这是一个通用的分词器,用于分隔单词和标点符号。撇号在此处不视为标点符号。
码:
text =“你好!你好吗!我很高兴你要去欧洲旅行!是的!”
nltk.tokenize.word_tokenize(文本)
word_tokenize
请注意,突出显示的单词是根据标点符号拆分的。
b。TweetTokenizer:专门用于处理来自包含#,@,表情符号的社交媒体的文本数据。
码:
text =“你好!你好吗!我很高兴你要去欧洲旅行!是的!”
从nltk.tokenize导入TweetTokenizer
tweet = TweetTokenizer()
tweet.tokenize(文字)
观察此处突出显示的部分并用词标记
C。regexp_tokenize:当我们想要按照共同的模式来分离我们感兴趣的单词时可以使用它,例如从推文中提取所有主题标签,从推文中提取地址或从文本中超链接。在这种情况下,您可以使用普通的正则表达式函数来分隔单词。
码:
汇入
a ='您对@nitin美国大选有何看法'
re.split(' s @ ',a)
5.删除停用词
停用词包括:我,他,她和,但是was was,being,have等,这些不会增加数据的含义。因此,必须删除这些单词,以帮助减少数据中的特征。这些标记在标记文本后将被删除。
码:
停用词= nltk.corpus.stopwords.words('english')
text =“你好!你好吗!我很高兴你要去欧洲旅行!是的!”
text_new =“” .join([[i,如果我不在string。标点中,则为i,在文本中为i]]
打印(text_new)
单词= nltk.tokenize.word_tokenize(text_new)
打印(文字)
words_new = [如果我不在停用词中,则i代表我的单词]
打印(words_new)
可以在删除停用词后给出条件以获取长度大于2的词
6.拔牙和拔牙
一种。词干:一种将词变成词根形式的技术。它只是从单词中删除后缀。词干不一定是词典的一部分,即不一定表示含义。茎秆主要有两种类型:波特·斯特默和雪球茎(波特·斯特默的高级版本)。
码:
ps = nltk.PorterStemmer()
w = [ps.stem(word)表示words_new中的单词]
打印(w)
要么
ss = nltk.SnowballStemmer(language ='english')
w = [ss.stem(word)表示words_new中的单词]
打印(w)
b。合法化:将这个词的根源称为Lemma。这有助于将单词带入其词典形式。默认情况下,它应用于名词。它使用基于上下文的更明智的分析来创建具有相似含义的单词组,因此更加准确,因此它很复杂并且需要更多时间。用于需要保留上下文信息的地方。
码:
wn = nltk.WordNetLemmatizer()
w = [wns_lemmatize(word)for words_new中的单词]
打印(w)
基于该问题,我们必须使用“阻止”或“禁止”。
尾注
这些清洁技术必须应用,以使我们的文本数据为分析和模型构建做好准备。不必必须执行所有这些步骤进行清洁。
有时,您想创建新的分析功能,例如每个文本中的标点符号百分比,大型数据集中任何产品/电影的每次评论长度,或者可以检查垃圾邮件或火腿邮件或正面情绪评论比负面情绪评论具有更多的标点符号,反之亦然。
文本清理完成后,我们将继续进行文本分析。在建立模型之前,有必要将文本数据转换为数字形式(称为矢量化),以便机器可以理解。
题库