内容简介:相关报道:https://medium.com/dataseries/the-data-science-behind-natural-language-processing-69d6df06a1ff
大数据文摘出品
来源:medium
编译:陆震、夏雅薇
自然语言处理(NLP)是计算机科学和人工智能范畴内的一门学科。
NLP是人与机器之间的沟通,使得机器既可以解释我们的语言,也可以就此作出有效回答。自20世纪50年代以来,这个领域一直存在,你可能听说过Alan Turing开创的“图灵测试”。图灵测试测量计算机对人类所提出问题做出反应的好坏程度。
如果第三方的人不能分辨出人和该计算机之间的区别,那么该计算系统就是智能的。20世纪50年代以来,人类为此努力了很多年,如今终于在数据科学和语言学领域取得了许多进展。
本文将详细介绍自然语言处理领域的一些算法的基本功能,包含一些 Python 代码示例。
标记化
开始自然语言处理之前,我们看几个非常简单的文本解析。标记化是将文本流(如一句话)分解为构成它的最基本的单词的过程。例如,下面一句话:“红狐狸跳过月球。”这句话有7个单词。
使用python标记句子:
<span>myText =<span>'The red fox jumps over the moon.'</span></span>
<span>myLowerText = myText.lower()</span>
<span>myTextList = myLowerText.<span>split</span>()</span>
<span><span>print</span>(myTextList)</span>
<span>OUTPUT:</span>
<span>[<span>'the'</span>,<span>'red'</span>,<span>'fox'</span>,<span>'jumps'</span>,<span>'over'</span>,<span>'the'</span>,<span>'moon'</span>]</span>
词性归类
词性用于确定句法功能。英语中的主要词性有:形容词,代词,名词,动词,副词,介词,连词和感叹词。这用于根据其用法推断单词的含义。例如,permit可以是名词和动词。作动词:“I permit you to go to the dance.”作名词:“Did you get the permit from the country.”
使用Python判断词性:(使用NLTK库)
你必须安装NLTK,这是一个用于自然语言处理的Python库。
关于NLTK的说明:
https://www-geeksforgeeks-org.cdn.ampproject.org/c/s/www.geeksforgeeks.org/part-speech-tagging-stop-words-using-nltk-python/amp/
import nltkmyText = nltk.word_tokenize('the red fox jumps over the moon.')print('Parts of Speech:',nltk.pos_tag(myText))OUTPUT:Parts of Speech:[('the','DT' ),('red','JJ'),('fox','NN'),('jumps','NNS'),('over','IN'),('the','DT' ),('moon','NN'),('.','.')]
你能看出NLTK是如何将句子分解为单个单词并说明其词性,如('fox','NN'):
NN noun, sigular 'fox'
停用词删除
许多句子和段落都包含一些几乎无实际意义的单词,包括“a”,“and”,“an”和“the”。停用词过滤是指从句子或单词流中删除这些单词。
使用Python和NLTK实现停用词过滤:
<span><span>from</span> nltk.corpus <span>import</span> stopwords</span>
<span><span>from</span> nltk.tokenize <span>import</span> word_tokenize</span>
<span><br /></span>
<span>example_sent =“a red fox <span>is</span> an animal that <span>is</span> able to jump over the moon.”</span>
<span>stop_words = set(stopwords.words(<span>'english'</span>))</span>
<span>word_tokens = word_tokenize(example_sent)</span>
<span>filtered_sentence = [w <span>for</span> w <span>in</span> word_tokens <span>if</span> <span>not</span> w <span>in</span> stop_words]</span>
<span>filtered_sentence = [] <span>for</span> w <span>in</span> word_tokens: <span>if</span> w <span>not</span> <span>in</span> stop_words:filtered_sentence.append(w)<span>print</span>(filtered_sentence)</span>
<span>OUTPUT:</span>
<span>[<span>'red'</span>,<span>'fox'</span>,<span>'animal'</span>,<span>'able'</span>,<span>'jump'</span>,<span>'moon'</span>,<span>'.'</span>]</span>
词干提取
词干化是减少单词噪声的过程,也被称为词典归一化。它减少了单词的变化。例如,单词“fishing”的词干为“fish”。
词干化用于将单词简化到其基本含义。另一个很好的例子是“喜欢”这个词,它是许多单词的词干,如:“likes”,“liked”和“likely”。
搜索引擎也是使用词干的。在许多情况下,用这种方法来搜索其中一个单词以返回包含该集合中另一个单词的文档可能是非常有用的。
需要使用Python和NLTK库实现词干化:
<span><span>from</span> nltk.stem <span>import</span> PorterStemmer</span>
<span>From nltk.tokenize <span>import</span> word_tokenize</span>
<span><br /></span>
<span>ps = PorterStemmer()</span>
<span>words = [“likes”,“possible”,“likes”,“liking”]</span>
<span><br /></span>
<span><span>for</span> w <span>in</span> words:</span>
<span><span>print</span>(w,“:”,ps.stem(w))</span>
<span><br /></span>
<span>OUTPUT:</span>
<span>(<span>'likes'</span>, <span>':'</span>, <span>u'like'</span>)</span>
<span>(<span>'likely'</span>, <span>':'</span>, <span>u'like'</span>)</span>
<span>(<span>'likes'</span>, <span>':'</span>, <span>u'like'</span>)</span>
<span>(<span>'liking'</span>, <span>':'</span>, <span>u'like'</span>)</span>
词形还原
词干化和词形归并非常相似,它们都使你能够找到根词。这被称为单词字归一化,两者可以生成相同的输出。但是,它们的工作原理非常不同。词干试图切分单词,而词形归并让你能够看清单词是名词,动词还是其他词性。
例如单词'saw',词干化返回'saw',词形归并返回'see'和'saw'。词形归并通常会返回一个可读的单词,而词干化可能不会。可以看下面的一个示例以了解差异。
<span><span>from</span> <span>nltk.stem import PorterStemmer</span></span>
<span><span>From</span> <span>nltk.stem import WordNetLemmatizer</span></span>
<span><br /></span>
<span><span>lemmatizer</span> = <span>WordNetLemmatizer()</span></span>
<span><span>ps</span> = <span>PorterStemmer()</span></span>
<span><span>words</span> = <span>[“corpora”,“constructing”,“better”,“done”,“worst”,“pony”]</span></span>
<span><br /></span>
<span><span>for</span> <span>w in words:</span></span>
<span><span>print(w,“STEMMING:”,ps.stem(w),“LEMMATIZATION”,lemmatizer.lemmatize(w,pos</span> = <span>'v'))</span></span>
<span><br /></span>
<span>OUTPUT:</span>
<span><span>corpora</span> <span>STEMMING:corpora LEMMATIZATION corpora</span></span>
<span><span>constructing</span> <span>STEMMING:construct LEMMATIZATION constructing</span></span>
<span><span>better</span> <span>STEMMING:better LEMMATIZATION good</span></span>
<span><span>done</span> <span>STEMMING:done LEMMATIZATION done</span></span>
<span><span>worst</span> <span>STEMMING:worst LEMMATIZATION bad</span></span>
<span><span>pony</span> <span>STEMMING:poni LEMMATIZATION pony</span></span>
结论
语言学是对语言,形态,句法,语音和语义的研究。包括数据科学和计算在内的这三个领域在过去60年中已经兴起爆发。我们刚刚只是探索了在NLP中一些非常简单的文本分析。Google,Bing和其他搜索引擎利用此技术帮助你在世界范围网络中查找信息。
想想让Alexa播放你最喜欢的歌曲是多么容易,或者Siri如何帮助你确定方向。这完全是因为NLP。计算系统中的自然语言不是噱头或玩具,而是我们生活中无缝对接计算系统的未来。
Arcadia Data刚刚发布了5.0版,其中包括我们称之为Search Based BI的自然语言查询功能。它使用了上面描述的一些数据科学和文本分析功能。
用我们的Search Based BI工具查看此视频:
http://watch.arcadiadata.com/watch/NSf1mMENjYfTY2cjpuGWPS?
相关报道:
https://medium.com/dataseries/the-data-science-behind-natural-language-processing-69d6df06a1ff
实习/全职编辑记者招聘ing
加入我们,亲身体验一家专业科技媒体采写的每个细节,在最有前景的行业,和一群遍布全球最优秀的人一起成长。坐标北京·清华东门,在大数据文摘主页对话页回复 “招聘” 了解详情。简历请直接发送至zz@bigdatadigest.cn
志愿者介绍
后台回复 “ 志愿者 ”加入我们
点「在看」的人都变好看了哦
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Practical Django Projects, Second Edition
James Bennett / Apress / 2009 / 44.99
Build a django content management system, blog, and social networking site with James Bennett as he introduces version 1.1 of the popular Django framework. You’ll work through the development of ea......一起来看看 《Practical Django Projects, Second Edition》 这本书的介绍吧!