自然语言处理技术解析

自然语言处理(NLP)技术解析
分词(Tokenization)

在自然语言处理领域,文本信息是信息的主要来源之一。文本数据通常包括文本、音频和视频,其中文本信息尤为重要。自然语言处理(NLP)的任务包括分析、修改和从文本数据中得出结论。这些文本或语音数据通常是完全非结构化和混乱的,需要大量的工作来处理和操作这些数据。幸运的是,Python语言编写的自然语言工具包(NLTK)使得这些繁琐的任务变得简单。它是一个用于自然语言处理的Python包,帮助机器理解人类语言。NLP的主要应用领域包括情感分析、推荐系统、搜索引擎中的自动更正(如谷歌)、招聘流程(如Naukri)、聊天机器人、Gmail中的垃圾邮件检测、文本预测等。

分词是将整个原始文本分解成可以用于处理的小单位的过程。在分词中有两函数可用:word_tokenize()和sent_tokenize()。word_tokenize()函数将整个原始文本转换为单词列表,其中标点符号也被视为单词,这有助于轻松移除可能不必要的标点符号以进行分析。例如,以下Python代码展示了如何使用nltk库的word_tokenize()函数对文本进行分词: import nltk corpus = """数据科学是一个跨学科领域,它使用科学方法、过程、算法和系统从结构化和非结构化数据中提取知识和洞察力,并将数据中的知识和可操作的洞察力应用于广泛的应用领域。数据科学与数据挖掘、机器学习和大数据相关。数据科学是一个“统一统计学、数据分析、信息学及其相关方法的概念”,以“用数据理解和分析实际现象”。它使用从数学、统计学、计算机科学、信息科学和领域知识中提取的技术和理论。然而,数据科学与计算机科学和信息学不同。图灵奖得主Jim Gray将数据科学想象为科学的“第四范式”(经验的、理论的、计算的,现在是数据驱动的),并断言“由于信息技术的影响和数据泛滥,科学的一切正在改变”""" # 分词成单词 words = nltk.word_tokenize(corpus) 这段代码将维基百科上关于数据科学的一部分文本分词成单词。nltk提供的word_tokenize()函数接受任何文本并将其拆分成单词列表。执行上述代码后,可以看到,即使标点符号也被视为单词。如果需要移除所有标点符号,可以使用以下代码: import string word = [] for i in words: if i not in string.punctuation: word.append(i) string.punctuation包含一系列标点符号(‘!”#$%&'()*+,-./:;<=>?@[\]^_`{|}~’),可以从单词列表中移除。现在新的单词列表只包含字母数字字符。

接下来,探讨句子分词(sent_tokenize)。与提取整个文本中的每个单词类似,句子分词返回一个包含整个文本中各个句子的列表。例如,以下代码展示了如何读取一个文本文件并将内容分割成句子: alice_book = open(r"C:UsersXXXXXDocumentsalice_in_wonderland.txt","r")#创建文本文件的句柄 book = alice_book.read()#读取文件内容 sentences = nltk.sent_tokenize(book)#句子分词内容 执行上述代码后,可以看到sent_tokenize()创建了一个逗号分隔的句子列表。现在可以使用列表的索引访问每个句子。例如,sentences[0]可以访问文本中的第一个句子。执行上述代码后,可以看到输出结果。让移除句子中存在的转义序列字符。将使用word_tokenize()函数来实现这一任务。 for i in range(len(sentences)): words = nltk.word_tokenize(sentences[i]) words = [word for word in words if word.isalnum()] sentences[i] = ' '.join(words) 每个句子进一步使用word_tokenizer()分解成单词,并且检查每个单词是否为字母数字字符。构建一个新的句子,该句子只包含单词,移除转义字符。对整个句子列表重复此过程。执行上述代码后,得到以下结果。

词形还原(Lemmatization)

要理解词形还原,先看看它的含义。维基百科对词形还原的定义是,“在语言学中,词形还原是将一个词的变形形式归并到一起,以便它们可以作为单个项目进行分析,通过词的基本形式或词典形式来识别”。让看看如何在Python中执行词形还原。 import nltk from nltk.stem import WordNetLemmatizer from nltk.corpus import stopwords lemmatizer = WordNetLemmatizer() #初始化词形还原器 # 词形还原 for i in range(len(sentences)): #遍历每个句子 words = nltk.word_tokenize(sentences[i]) #从句子中提取每个单词 words = [lemmatizer.lemmatize(word) for word in words if word not in set(stopwords.words('english'))] #词形还原每个单词 sentences[i] = ' '.join(words) WordNetLemmatizer()包含lemmatize()函数,它接受单词并返回它们的词元形式。在句子分词过程中清理的句子现在被转换为它们的词元形式。停用词是文章、连词和介词,这些对于句子分析并不重要。首先移除这些停用词,然后将词的词元形式保存在sentences列表中。

词干提取(Stemming)

维基百科对词干提取的定义是,“在语言学形态学和信息检索中,词干提取是将屈折变化(或有时派生)的词减少到它们的词干、基础或根形式的过程”。让看看如何在Python中执行词干提取。 import nltk from nltk.stem import PorterStemmer from nltk.corpus import stopwords stemmer = PorterStemmer() #初始化词干提取器 # 词干提取 for i in range(len(sentences)): #遍历每个句子 words = nltk.word_tokenize(sentences[i]) #从句子中提取每个单词 words = [stemmer.stem(word) for word in words if word not in set(stopwords.words('english'))] #找到每个词的词干 sentences[i] = ' '.join(words) 结果如下所示。语法几乎与词形还原相同,只是PortStemmer用于此任务。现在的句子看起来与它的词元形式有很大不同。例如,sitting的词干是sit,picture的词干是picture等。

词袋模型(Bag of Words)
TF-IDF
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485