Skip to content

Latest commit

 

History

History
361 lines (245 loc) · 12.2 KB

text-mining-python-steps-examples.md

File metadata and controls

361 lines (245 loc) · 12.2 KB

Python 中的文本挖掘:步骤和示例

原文:www.kdnuggets.com/2020/05/text-mining-python-steps-examples.html

评论

作者:Dhilip Subramanian,数据科学家和人工智能爱好者

Header image


我们的前三大课程推荐

1. Google 网络安全证书 - 快速进入网络安全职业生涯。

2. Google 数据分析专业证书 - 提升你的数据分析技能

3. Google IT 支持专业证书 - 支持你的组织在 IT 方面


在今天的场景中,人们的成功方式之一是通过他们如何与他人沟通和分享信息来确定的。这就是语言概念发挥作用的地方。然而,世界上有许多语言,每种语言都有不同的标准和字母,这些单词有意义地排列组合形成句子。每种语言在构建这些句子时都有自己的规则,这些规则也称为语法。

在当今世界,根据行业估算,只有 20%的数据是以结构化格式生成的,无论是我们发推文、发送 WhatsApp 消息、电子邮件、Facebook、Instagram 还是任何文本消息。大多数数据存在于文本形式中,这是一种高度非结构化的格式。为了从文本数据中提取有意义的见解,我们需要遵循一种叫做文本分析的方法。

什么是文本挖掘?

文本挖掘是从自然语言文本中提取有意义信息的过程。

什么是自然语言处理(NLP)?

自然语言处理(NLP)是计算机科学和人工智能的一部分,处理人类语言。

换句话说,NLP 是文本挖掘的一个组成部分,执行一种特殊的语言分析,帮助机器“阅读”文本。它使用不同的方法来解码人类语言中的模糊性,包括以下内容:自动摘要、词性标注、消歧义、分块以及消歧义和自然语言理解与识别。我们将通过 Python 逐步了解所有这些过程。

首先,我们需要安装 NLTK 库,它是一个自然语言工具包,用于构建 Python 程序以处理人类语言数据,并提供易于使用的接口。

自然语言处理术语

分词

分词是自然语言处理中的第一步。它是将字符串分解成标记的过程,而标记又是较小的结构或单元。分词涉及三个步骤:将复杂句子拆分为单词,理解每个单词在句子中的重要性,最后对输入句子生成结构描述。

代码:

# Importing necessary library
import pandas as pd
import numpy as np
import nltk
import os
import nltk.corpus# sample text for performing tokenization
text =In Brazil they drive on the right-hand side of the road. Brazil has a large coastline on the eastern
side of South America"# importing word_tokenize from nltk
from nltk.tokenize import word_tokenize# Passing the string text into word tokenize for breaking the sentences
token = word_tokenize(text)
token

输出

['In','Brazil','they','drive', 'on','the', 'right-hand', 'side', 'of', 'the', 'road', '.', 'Brazil', 'has', 'a', 'large', 'coastline', 'on', 'the', 'eastern', 'side', 'of', 'South', 'America']

从上述输出可以看出,文本被拆分成了标记。单词、逗号、标点符号都被称为标记。

在文本中查找频率差异

代码 1

# finding the frequency distinct in the tokens
# Importing FreqDist library from nltk and passing token into FreqDist
from nltk.probability import FreqDist
fdist = FreqDist(token)
fdist

输出

FreqDist({'the': 3, 'Brazil': 2, 'on': 2, 'side': 2, 'of': 2, 'In': 1, 'they': 1, 'drive': 1, 'right-hand': 1, 'road': 1, ...})

‘the’在文本中出现了 3 次,‘Brazil’出现了 2 次,等等。

代码 2

# To find the frequency of top 10 words
fdist1 = fdist.most_common(10)
fdist1

输出

[('the', 3),
 ('Brazil', 2),
 ('on', 2),
 ('side', 2),
 ('of', 2),
 ('In', 1),
 ('they', 1),
 ('drive', 1),
 ('right-hand', 1),
 ('road', 1)]

词干提取

词干提取通常指将单词规范化为其基本形式或根形式。

在这里,我们有单词 waited、waiting 和 waits。根词是‘wait’。词干提取有两种方法,即 Porter 词干提取(去除单词的常见形态和屈折结尾)和 Lancaster 词干提取(更激进的词干提取算法)。

代码 1

# Importing Porterstemmer from nltk library
# Checking for the word ‘giving’ 
from nltk.stem import PorterStemmer
pst = PorterStemmer()
pst.stem(“waiting”)

输出

'wait'

代码 2

# Checking for the list of words
stm = ["waited", "waiting", "waits"]
for word in stm :
   print(word+ ":" +pst.stem(word))

输出

waited:wait
waiting:wait
waits:wait

代码 3

# Importing LancasterStemmer from nltk
from nltk.stem import LancasterStemmer
lst = LancasterStemmer()
stm = [“giving”, “given”, “given”, “gave”]
for word in stm :
 print(word+ “:” +lst.stem(word))

输出

giving:giv
given:giv
given:giv
gave:gav

Lancaster 比 Porter 词干提取器更激进

词形还原

简单来说,这是一种将单词转换为其基本形式的过程。词干提取和词形还原的区别在于,词形还原考虑上下文,将单词转换为其有意义的基本形式,而词干提取只是去掉最后几个字符,通常导致错误的含义和拼写错误。

例如,词形还原会正确地将‘caring’的基本形式识别为‘care’,而词干提取则会去掉‘ing’部分,将其转换为 car。

词形还原可以通过使用 Wordnet Lemmatizer、Spacy Lemmatizer、TextBlob、Stanford CoreNLP 在 Python 中实现。

代码

# Importing Lemmatizer library from nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer() 

print(“rocks :”, lemmatizer.lemmatize(“rocks”)) 
print(“corpora :”, lemmatizer.lemmatize(“corpora”))

输出

rocks : rock
corpora : corpus

停用词

“停用词”是语言中最常见的词汇,如“the”、“a”、“at”、“for”、“above”、“on”、“is”、“all”。这些词没有提供任何实际意义,通常会从文本中删除。我们可以使用 nltk 库来删除这些停用词。

代码

# importing stopwors from nltk library
from nltk import word_tokenize
from nltk.corpus import stopwords
a = set(stopwords.words(‘english’))text =Cristiano Ronaldo was born on February 5, 1985, in Funchal, Madeira, Portugal.”
text1 = word_tokenize(text.lower())
print(text1)stopwords = [x for x in text1 if x not in a]
print(stopwords)

输出

Output of text:
['cristiano', 'ronaldo', 'was', 'born', 'on', 'february', '5', ',', '1985', ',', 'in', 'funchal', ',', 'madeira', ',', 'portugal', '.']Output of stopwords:
['cristiano', 'ronaldo', 'born', 'february', '5', ',', '1985', ',', 'funchal', ',', 'madeira', ',', 'portugal', '.']

词性标注(POS)

词性标注用于为给定文本中的每个单词分配词性(如名词、动词、代词、副词、连词、形容词、感叹词),根据其定义和上下文。有许多可用的 POS 标注工具,其中一些广泛使用的标注工具有 NLTK、Spacy、TextBlob、Standford CoreNLP 等。

代码

text =vote to choose a particular man or a group (party) to represent them in parliament#Tokenize the text
tex = word_tokenize(text)
for token in tex:
print(nltk.pos_tag([token]))

输出

[('vote', 'NN')]
[('to', 'TO')]
[('choose', 'NN')]
[('a', 'DT')]
[('particular', 'JJ')]
[('man', 'NN')]
[('or', 'CC')]
[('a', 'DT')]
[('group', 'NN')]
[('(', '(')]
[('party', 'NN')]
[(')', ')')]
[('to', 'TO')]
[('represent', 'NN')]
[('them', 'PRP')]
[('in', 'IN')]
[('parliament', 'NN')]

命名实体识别

这是检测命名实体的过程,如人名、地点名、公司名、数量和货币值。

图

参考:Sujit Pal

代码

text =Googles CEO Sundar Pichai introduced the new Pixel at Minnesota Roi Centre Event#importing chunk library from nltk
from nltk import ne_chunk# tokenize and POS Tagging before doing chunk
token = word_tokenize(text)
tags = nltk.pos_tag(token)
chunk = ne_chunk(tags)
chunk

输出

Tree('S', [Tree('GPE', [('Google', 'NNP')]), ("'s", 'POS'), Tree('ORGANIZATION', [('CEO', 'NNP'), ('Sundar', 'NNP'), ('Pichai', 'NNP')]), ('introduced', 'VBD'), ('the', 'DT'), ('new', 'JJ'), ('Pixel', 'NNP'), ('at', 'IN'), Tree('ORGANIZATION', [('Minnesota', 'NNP'), ('Roi', 'NNP'), ('Centre', 'NNP')]), ('Event', 'NNP')])

词组分析

词块化是指提取单独的信息片段并将其分组为更大的块。在自然语言处理(NLP)和文本挖掘的背景下,词块化是将词语或标记分组为块。

图片

参考: nltk.org

代码

text =We saw the yellow dogtoken = word_tokenize(text)
tags = nltk.pos_tag(token)reg =NP: {<DT>?<JJ>*<NN>}” 
a = nltk.RegexpParser(reg)
result = a.parse(tags)
print(result)

输出

(S We/PRP saw/VBD (NP the/DT yellow/JJ dog/NN))

本博客总结了文本预处理,并涵盖了包括分词、词干提取、词形还原、词性标注、命名实体识别和词块化在内的 NLTK 步骤。

感谢阅读。继续学习,敬请关注更多内容!

参考:

  1. www.expertsystem.com/natural-language-processing-and-text-mining/

  2. www.nltk.org

  3. www.edureka.co

  4. www.geeksforgeeks.org/nlp-chunk-tree-to-text-and-chaining-chunk-transformation/

  5. www.geeksforgeeks.org/part-speech-tagging-stop-words-using-nltk-python/

简介: Dhilip Subramanian 是一名机械工程师,已获得分析学硕士学位。他拥有 9 年的数据相关领域经验,专注于 IT、市场营销、银行、电力和制造业。他对自然语言处理(NLP)和机器学习充满热情。他是SAS 社区的贡献者,并在 Medium 平台上撰写有关数据科学各个方面的技术文章。

原文。经许可转载。

相关:

  • 使用 TensorFlow 和 Keras 进行分词和文本数据准备

  • 五款酷炫的 Python 数据科学库

  • 自然语言处理食谱:最佳实践和示例

更多相关话题