Python自然语言处理 NLTK 库用法入门教程【经典】

怎样幸免过度替换

在自个儿认为就要水到渠成的时候,小编用事先写好的 PHPUnit
单元测试代码举行了测试,结果报出了错误,在上述格局中,假若传入的参数是包涵HTML 标签的富文本,那么 HTML 的要素、成分属性以及值都有可能会被交换。

如何防止超负荷替换这么些题材呢?约等于说:

只替换文本,而忽视 HTML 标签及标签内部的故事情节?

本人尝试写了某个套匹配方案,都未果了。最终依旧请出了 Google大神来协助。那里,搜索的关键字很首要,最好想把你要摸索的显要词翻译成对应的英文单词,那样搜索出的结果会令你更满足。结果本人找到了化解方案:Matching
A Word / Characters Outside Of Html
Tags。

由此地点那部小说的唤起,作者又将 properNoun() 方法改造如下:

public function properNoun($text, array $extend = [], array $ignore = [])
{
    $dict = include __DIR__ . '/../data/dict.php';
    if ($extend) {
        $dict = array_merge($dict, $extend);
    }
    if ($ignore) {
        $dict = array_diff($dict, $ignore);
    }
    foreach ($dict as $noun) {
        // Matching proper nouns Outside Of Html Tags
        $text = preg_replace("/(?<!\.|[a-z]){$noun}(?!\.|[a-z])(?!([^<]+)?>)/i", $noun, $text);
    }
    return $text;
}

play
playing
playing
playing

复制代码 代码如下:

01

保加哈里斯堡语专闻名词的多寡来源

第贰,,面临的率先个难点是:

乌克兰(УКРАЇНА)语专有名词的数码从哪来?

自小编第壹想到的是 Python 有2个自然语言处理的包
NLTK,这么些包有个名为 pos_tag
的函数,可以用来辨别并标注各个单词的词性,其中被标明为 NNP 或 NNPS
的单词就是专闻明词(Proper Noun)。作者估量,NLTK
数据包里应该有一个应和的专知名词数据集,然则,苦于能力有限,小编一向尚未找到。

上述的不二法门走不通后,作者又通过 谷歌(Google)搜索,发现经过网络字典来获取数据是一条有效的方案。通过这一艺术,终于在
Wiktionary
找到了克罗地亚共和国语专盛名词列表。于是,利用 Python
写了二个爬虫小本子,爬取了相应的多少。

末段,就是对爬取到的数据开展了一部分打点和筛选。

筛选方案如下:

  • 使用 is_numeric() 方法,剔除诸如 007 等词汇;
  • 使用 '/\W/' 正则,剔除诸如 ǃXóõ 等词汇;
  • 剔除 strlen 方法,剔除 A 等单字节词汇;
  • 剔除跟 HTML、CSS、JavaScript 保留字冲突的词汇;

NLTK 具有大部分言语的截至词表。要博得英文甘休词,你可以利用以下代码:

前天在网查到一篇介绍php中替换字符串中的空格为逗号’,’的稿子,作个日记保存下来。

16

支出计算

  • 学会正确上网;
  • 善于 谷歌(Google)、Github 和
    StackOverflow,那三样“神器”会帮你消除掉开发进度中相见的大举(或许说所有)问题;
  • 学会一些 Google搜索小技巧。例如将追寻关键字翻译成西班牙语单词,那样的追寻结果会令你更惬意;
  • 印度语印尼语真的很重大。最起码你应有在 Chrome 浏览器上安装三个 Google
    翻译
    的插件;
  • PHPUnit 真的很有用,尤其是在频仍增改功用照旧必要代码重构的类型中。
  • 绝不让本身仅限于多少个编程语言,学习其它一门或多门语言作为扶助,有益于拓展思路和开拓眼界。
  • 多逛逛 Laravel China 那样的高格调社区;

拔取 NLTK 删除为止词

<pre name=”code” class=”php”><? php
/*
* 关键词中的空格替换为’,’
*/
public function emptyreplace($str) {
$str = str_replace(‘ ’, ‘ ‘, $str); //替换全角空格为半角
$str = str_replace(‘ ‘, ‘ ‘, $str); //替换再而三的空格为贰个
$noe = false; //是不是碰到不是空格的字符
for ($i=0 ; $i<strlen($str); $i++) { //遍历整个字符串
if($noe && $str[$i]==’ ‘) $str[$i] = ‘,’;
//即使当前以此空格此前出现了不是空格的字符
elseif($str[$i]!=’ ‘) $noe=true; //当前那个字符不是空格,定义下 $noe
变量
}
return $str;
}
?>

    app.py

chinese-typesetting
包涵以下职能:

输出是:

您恐怕感兴趣的稿子:

  • PHP中去掉字符串首尾空格的章程
  • php中3种格局删除字符串中间的空格
  • PHP
    将逗号、空格、回车分隔的字符串转换为数组的函数
  • PHP中空字符串介绍0、null、empty和false之间的关联
  • php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
  • php中0,null,empty,空,false,字符串关系的事无巨细介绍
  • PHP中用正则表明式清除字符串的空白
  • PHP清除数组中享有字符串两端空格的点子
  • php下清空字符串中的HTML标签的代码
  • 详解php中空字符串和0之间的涉及

def collect_all_words(self, items):

  • 在粤语言与英文字母/用于数学、科学和工程的希腊共和国字母/数字之间添加空格;
  • 有限度的全角转半角(英文、数字、空格以及一些特殊字符等使用半角字符);
  • 修补错误的标点;
  • 扫除 HTML 标签的体裁;
  • 清除空的 HTML 标签;
  • 解除段首缩进;

呃!Mr. 是1个词,固然带有三个符号。让大家来试试使用 NLTK 进行分词:

 

本篇小说不是为了记开发流水账,而是想把支付进度的相遇的题材以及缓解思路和豪门展开交换和读书。小编是一名一般的
PHP
工程师,希望对初级开发同学有所支持。具体的心体面会面文末的总结

结果是:

      features = item.features(top_words)

怎么着改正和优化代码逻辑

自家在写那一个职能的时候,也在研究和参照一些存活开源项目标兑现逻辑。在察看开源项目
auto-correct 的一个
commit
上后(PS:那几个 PEvoque 是社区大神 overtrue
提交的。),我又将 properNoun() 方法改造如下:

public function properNoun($text, array $extend = [], array $ignore = [])
{
    $dict = include __DIR__ . '/../data/dict.php';
    if ($extend) {
        $dict = array_merge($dict, $extend);
    }
    if ($ignore) {
        $dict = array_diff($dict, $ignore);
    }
    foreach ($dict as $noun) {
        $text = preg_replace("/(?<!\.|[a-z]){$noun}(?!\.|[a-z])/i", $noun, $text);
    }
    return $text;
}

未来,让大家修改我们的代码,并在绘制图形在此之前清理标记。首先,我们复制三个列表。然后,大家通过对列表中的标记进行遍历并剔除其中的终止词:

 

本周,公司支付工作不多,无加班,于是从头思考新功效更正菲律宾语专闻名词大小写的实现。

可望本文所述对大家Python程序设计有所支持。

 

终极的话

假若还有怎么着须求说的话,那就是求 Star
啦,哈哈哈哈哈。项目地址:

好呢,让大家独家品尝一些单词的词干提取和词形还原:

16

本月首,我在 GitHub
上开源了一个温馨的小项目:chinese-typesetting。那是一个校订粤语文案排版的
Composer 包。

from bs4 import BeautifulSoup
import urllib.request
response = urllib.request.urlopen('http://php.net/')
html = response.read()
soup = BeautifulSoup(html,"html5lib")
text = soup.get_text(strip=True)
print (text)

      def tearDown(self):

怎么着让使用者定制专盛名词数据

初期的代码如下:

/**
 * 专有名词使用正确的大小写
 * Correct English proper nouns.
 *
 * @param $text
 *
 * @return null|string|string[]
 */
public function properNoun($text)
{
    $dict = include __DIR__ . '/../data/dict.php';
    foreach ($dict as $noun) {
        $text = preg_replace("/\b{$noun}\b/i", $noun, $text);
    }
    return $text;
}

以往想到,借使应用这么些形式的开发者想增加或然忽视有个别专知名词,那该如何是好呢?
于是,我又将 properNoun() 方法改造如下:

/**
 * 专有名词使用正确的大小写
 * Correct English proper nouns.
 *
 * @param $text
 * @param array $extend
 * @param array $ignore
 *
 * @return null|string|string[]
 */
public function properNoun($text, array $extend = [], array $ignore = [])
{
    $dict = include __DIR__ . '/../data/dict.php';
    if ($extend) {
        $dict = array_merge($dict, $extend);
    }
    if ($ignore) {
        $dict = array_diff($dict, $ignore);
    }

    foreach ($dict as $noun) {
        $text = preg_replace("/\b{$noun}\b/i", $noun, $text);
    }
    return $text;
}

万一你查看输出结果,会发现最常用的用语是PHP。

3

您可以在此处查看Python List
函数, 
通晓什么处理列表。

为了显得在你的系统上已安装的 Python 库的列表,请运营以下命令:

领到非匈牙利(Hungary)语单词词干

# system imports; loads installed packages

那就是 NLTK 在自然语言处理中的力量。

 

from nltk.tokenize import sent_tokenize
mytext = "Bonjour M. Adam, comment allez-vous? J'espère que tout va bien. Aujourd'hui est un bon jour."
print(sent_tokenize(mytext,"french"))

k-Nearest Neighbors (kNN)
是最常用的指出算法。思路是向它提供一组标签(即序列),
并且每种标签都对应3个数额集。然后,该算法对各数据集举办了相比,以识别相似的档次。数据集由多少个数值数组构成,数值的限制往往被规范化为从
0 到 1。然后,它可以从数额集识别相似的竹签。与只爆发二个结出的 Naive
Bayes 分歧,kNN 可以生出3个有排行的列表,其中蕴蓄若干(即,k
的值)个提出。

a symptom of some physical hurt or disorder
[‘the patient developed severe pain and distension’]

pip

clean_tokens = tokens[:]
sr = stopwords.words('english')
for token in tokens:
  if token in stopwords.words('english'):
    clean_tokens.remove(token)

诸如,小编使用的样例提要包含了体育电视机网络店铺 ESPN。提要的花色之一是有关
Denver Broncos 橄榄球队的 Tim Tebow 被转化到 New York Jets
橄榄球队,在同目前间,Broncos 签了他们新的陆分卫 Peyton
Manning。提要结果中的另2个档次是 Boeing Company 和它的新喷气式飞机
(jet)。所以,那里的题材是,应该将什么具体的门类值分配给第贰,个传说?tebow、broncos、manning、jets、quarterback、trade和nfl那么些值都以适度的。但只有三个值可以在练习多少中被指定为教练多少系列。同样,在第三个故事中,序列应该是boeing依旧jet?困难的一些在于那么些细节。假设你的算法要发出精确的结果,那么大型训练数据集的标准手工分类极度重大。要成功那或多或少,不应该低估所需的光阴。

结果是: 

$ pip freeze

NLTK 也很不难入门,实际上,它将是你用到的最不难易行的自然语言处理(NLP)库。

        words   = []

  • Natural language toolkit (NLTK)
  • Apache OpenNLP
  • Stanford NLP suite
  • Gate NLP library

18

但是搜索引擎并不是自然语言处理(NLP)的绝无仅有采纳。还有更好进而特出的使用。

18

只要你还记得大家使用 nltk.download( ) 安装 NLTK
的增加包时。其中一个扩充包名为 WordNet。WordNet
是为自然语言处理创设的数据库。它总结一些词语的1个同义词组和二个简短的定义。

        f.close

您只怕会说,那是一件不难的政工。作者不须求动用 NLTK
标记器,并且作者得以采纳正则表明式来划分句子,因为各类句子前后都有标点符号大概空格。

    def capture_as_pickled_feed(self, url, feed_index):

你可以用绘图函数为那一个词频绘制二个图纸: freq.plot(20, cumulative=False)

12

结果是:

清单 8. 使用 nltk.FreqDist 类 

大家恰好驾驭了什么选取 split( ) 函数将文件分割为标记
。将来,大家将看到什么样利用 NLTK
对文本进行标记化。对文件进行标记化是很重大的,因为文件不大概在并未进展标记化的意况下被拍卖。标记化意味着将较大的一对分隔成更小的单元。

 

词频统计

    classify.py

NLTk 对任何非韩文语言的支撑也非凡好!

        f.close()

标志非西班牙王国语语言文本

07

freq.plot(20,cumulative=False)

    import news

到现在,假诺大家试图用NLTK WordNet来复苏同壹个词,结果会是不易的:

if __name__ == “__main__”:

要反省 NLTK
是还是不是科学地设置完毕,可以打开你的Python终端并输入以下内容:Import
nltk。假若一切顺遂,那表示你已经成功安装了 NLTK 库。

接纳 k-Nearest Neighbors 算法指出提出

NLP的作用

1

在笔者看来,词形还原比提取词干的措施更好。词形还原,若是实在无法回去这一个词的变形,也会回到另二个确实的单词;那一个单词大概是三个同义词,但好歹那是三个当真的单词。当有时候,你不关切准确度,须要的只是速度。在这种景色下,词干提取的办法更好。

12

那就是说,看看上面的文字:

清单 1. Main 检测 

结果将是这么的:

 

play

if __name__ == “__main__”:

词干提取的算法有诸多,但最常用的算法是 Porter 提取算法。NLTK 有三个PorterStemmer 类,使用的就是 Porter 提取算法。

清单 5. Python unittest 

从 WordNet 获取反义词

    # application imports; these load your specific *.py files

输出如下:

04

结果是:

破获和分析提要

第一大家将抓取一些网页内容。然后来分析网页文本,看看爬下来的网页的主旨是有关怎么着。大家将使用
urllib模块来抓取网页:

8

假如你未来检讨图表,会深感比以前那张图标尤其分明,因为尚未了截止词的干扰。

 

在那篇小说中,我们将按照 Python
探究自然语言处理(NLP)。本学科将会采纳 Python NLTK 库。NLTK
是多少个立马风靡的,用于自然语言处理的 Python 库。

12

您可以将段落划分为句子,并依照你的急需将句子分割为单词。NLTK
具有内置的句子标记器和词语标记器。

        f = open(‘feeds_list.txt’, ‘r’)

结果很明亮。

02

还有其余部分领取算法,如 Lancaster 提取算法。这些算法的输出同 Porter
算法的结果在多少个单词上差距。你可以品味他们五个算法来查阅有啥不一样结果。

应用 Python 和 NLTK 达成分类

结果是:

23

自然语言工具包(NLTK)是最受欢迎的自然语言处理(NLP)库。它是用 Python
语言编写的,背后有强有力的社区协理。

Pythonunittest标准库提供三个丰盛好的测试化解方案。熟识 JUnit 的 Java
开发人士和驾驭 Test::Unit 框架的 Ruby 开发人员应该会认为 清单 5 中的
Pythonunittest代码很简单明白。

from bs4 import BeautifulSoup
import urllib.request
import nltk
from nltk.corpus import stopwords
response = urllib.request.urlopen('http://php.net/')
html = response.read()
soup = BeautifulSoup(html,"html5lib")
text = soup.get_text(strip=True)
tokens = [t for t in text.split()]
clean_tokens = tokens[:]
sr = stopwords.words('english')
for token in tokens:
  if token in stopwords.words('english'):
    clean_tokens.remove(token)
freq = nltk.FreqDist(clean_tokens)
for key,val in freq.items():
  print (str(key) + ':' + str(val))

下一步的挑衅性之大是奇怪的。今后,作者有了样例提要多少,必须对它举办分拣,以便将它用作训练多少。训练数据
是向您的分类算法提供的数据集,以便你能从中举行学习。

from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('playing', pos="v"))
print(lemmatizer.lemmatize('playing', pos="n"))
print(lemmatizer.lemmatize('playing', pos="a"))
print(lemmatizer.lemmatize('playing', pos="r"))

06

你可以利用 SnowballStemmer 类的 stem()函数来提取非意国语单词,如下所示:

 

有过多商行热衷收集全数那一个数量,以便更好地打听他们的用户和用户对成品的热心,并对她们的成品可能服务举行适度的调整。

16

from nltk.tokenize import sent_tokenize
mytext = "Hello Mr. Adam, how are you? I hope everything is going well. Today is a good day, see you dude."
print(sent_tokenize(mytext))

>>> import nltk        # import the nltk library

行使 WordNet 引入词汇

        cleaned = nltk.clean_html(oneline.strip())

from nltk.corpus import stopwords
stopwords.words('english')

1

以下皆以自然语言处理(NLP)的部分成功使用:

2

输出如下:

04

increas

 

from bs4 import BeautifulSoup
import urllib.request
response = urllib.request.urlopen('http://php.net/')
html = response.read()
soup = BeautifulSoup(html,"html5lib")
text = soup.get_text(strip=True)
tokens = [t for t in text.split()]
print (tokens)

 

最后的代码应该是那样的:

07

在那么些 NLP 教程中,大家将动用 Python NLTK 库。在初阶安装  NLTK
在此之前,作者假若你领悟有个别
Python入门知识。

19

from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
print(stemmer.stem('increases'))

06

动用原生 Python 来对文件进行分词

清单 7. RssItem 类 

经过 NLTK 你可以拿到给定词的概念和例句:

05

from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('increases'))

 

NLP库

1

正如所料,Mr. 是二个词,也着实被 NLTK 当做3个词。NLTK使用
nltk.tokenize.punkt module 中的  PunktSentenceTokenizer
举行文本分词。那些标记器经过了精良的教练,可以对多样语言举办分词 。

 

来源法兰西共和国的爱人欢迎在评论区 poll 出你们测试的结果!

12

结果是:

2

输出是:

 

from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('playing', pos="v"))

 

from nltk.corpus import wordnet
antonyms = []
for syn in wordnet.synsets("small"):
  for l in syn.lemmas():
    if l.antonyms():
      antonyms.append(l.antonyms()[0].name())
print(antonyms)

        for t1 in toks1:

[‘large’, ‘big’, ‘big’]

    app.py

后日,大家能将抓取的网页转换为彻底的文件。那很棒,不是么?

      for w in top_words:

粗略的说,自然语言处理( NLP
)就是付出可以领略人类语言的应用程序和劳务。

                t2s = t2.strip().lower()

Hello Mr. Adam, how are you? I hope everything is going well. Today is
a good day, see you dude.

1

你可以用相同的方法获得单词的反义词。你唯一要做的是在将 lemmas
的结果出席数组在此以前,检查结果是还是不是真的是2个不利的反义词。

 

为了标记其他语言,可以像这么指定语言:

        cleaned = nltk.clean_html(oneline.strip())

词汇的词汇化与提取词干类似,但不一样之处在于词汇化的结果是1个真的的词汇。与词干提取差别,当您打算提取部分词干时,有可能会促成那样的意况:

8

前几天有广大开源的自然语言处理(NLP)库。比如:

10

work

01

[‘Hello’, ‘Mr.’, ‘Adam’, ‘,’, ‘how’, ‘are’, ‘you’, ‘?’, ‘I’, ‘hope’,
‘everything’, ‘is’, ‘going’, ‘well’, ‘.’, ‘Today’, ‘is’, ‘a’, ‘good’,
‘day’, ‘,’, ‘see’, ‘you’, ‘dude’, ‘.’]

请小心名称古怪的 __init__.py 文件。这么些文件指示 Python
为你的包加载须求的库和一定的应用程序代码文件,它们都位居同一的目录中。
清单 4 显示了文本 locomotive/__init__.py 的内容。

假定大家有如下的言传身教文本:

>>> nltk.download()    # run the NLTK Downloader, then enter
‘d’ Download

为了将那么些文件标记化为句子,我们得以行使句子标记器:

if __name__ == “__main__”:

from bs4 import BeautifulSoup
import urllib.request
import nltk
response = urllib.request.urlopen('http://php.net/')
html = response.read()
soup = BeautifulSoup(html,"html5lib")
text = soup.get_text(strip=True)
tokens = [t for t in text.split()]
freq = nltk.FreqDist(tokens)
for key,val in freq.items():
  print (str(key) + ':' + str(val))

 

最终,让大家通过以下办法将文件分词:

1

import nltk
nltk.download()

for item in rss_items_to_classify:

实际上,那是二个卓越好的文书压缩水平。最后减掉到原文本的 50% 到 60%
左右。结果只怕是动词,名词,形容词或副词:

老是在3个 shell 窗口使用你的种类时,都亟需 “得到”
您的虚拟环境激活脚本。请小心,在激活脚本被获取后,shell
指示符会改变。当在您的种类上成立和使用 shell
窗口,轻松地导航到您的门类目录,并运维其虚拟环境时,您可能想在你的
~/.bash_profile 文件中加上以下条目:

安装 NLTK

对数据和算法进行完美是一门艺术。您是还是不是相应进一步规范化单词集,大概应该包涵词根?恐怕包蕴当先1000个最常用单词?少一些是或不是确切?或许是否合宜运用更大的教练多少集?是还是不是相应加上更多信用词或
“停用词根”?这一个都是你要问本人的不利难题。使用它们举行实验,通过试错法,您可以会为您的多寡落成最佳算法。作者意识,85%
是多少个很好的分类成功率。

from nltk.tokenize import word_tokenize
mytext = "Hello Mr. Adam, how are you? I hope everything is going well. Today is a good day, see you dude."
print(word_tokenize(mytext))

class CaptureFeeds:

[‘Hello Mr. Adam, how are you?’, ‘I hope everything is going well.’,
‘Today is a good day, see you dude.’]

10

今日的文本比较在此之前的 html 文本好多了。我们再采取 Python NLTK
来测算每一种词的出现频率。NLTK 中的FreqDist( ) 函数可以兑现词频总括的效益

1

从打印输出中可以看来,结果中蕴藏众多亟需清理的HTML标记。我们得以用这一个 
BeautifulSoup 库来对抓取的公文举办处理:

$ sudo pip install virtualenv $ cd ~ $ mkdir p1 $ cd p1 $ virtualenv
p1_env –distribute $ source p1_env/bin/activate  (p1_env)[~/p1]$
pip install feedparser (p1_env)[~/p1]$ pip install numpy
(p1_env)[~/p1]$ pip install scipy (p1_env)[~/p1]$ pip install nltk
(p1_env)[~/p1]$ pip freeze

正如大家所知,每日博客,社交网站和网页会发出数亿字节的海量数据。

 

stone
speak
bedroom
joke
lisa

purpl

stone
speaking
bedroom
joke
lisa
purple

该品种专门具有挑战性,因为客户还未曾概念目的 ENVISIONSS
提要列表。由此,也不存在
“陶冶多少”。所以,在开首开发时期必须模拟提要和陶冶多少。

倘诺你安装了 NLTK,你可以运维下边的代码来设置 NLTK 包:

专程令人感兴趣的是文件
~/nltk_data/corpora/reuters/cats.txt。它包蕴了三个列表,其中包涵小说文件名称,以及为各种篇章文件分配的项目。文件看起来如下所示,所以,子目录
test 中的文件 14828 中的小说与焦点grain有关。

我们在本 NLP
教程中商讨的装有手续都关涉到文本预处理。在后来的稿子中,我们将研商使用Python
NLTK举办文本分析。

Pythonunittest标准库提供一个不行好的测试解决方案。熟稔 JUnit 的 Java
开发人士和纯熟 Test::Unit 框架的 Ruby 开发人士应该会认为 清单 5 中的
Pythonunittest代码很简单了解。

from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
print(stemmer.stem('working'))

 

from nltk.corpus import wordnet
syn = wordnet.synsets("NLP")
print(syn[0].definition())
syn = wordnet.synsets("Python")
print(syn[0].definition())

如前所述,算法借使各种天性之间是不曾涉嫌的。因而,像 “machine learning”
和 “learning machine”,只怕 “New York Jet” 和 “jet to New York”
那样的短语是一致的(to
是3个停用词)。在当然的语言上下文中,那些单词之间有分明的涉嫌。所以,作者怎么会让算法变得
“不那么天真”,并识别那些单词的关联?

您可以拔取安装具有的软件包,因为它们的体积不大,所以没有啥难点。今后,大家开始读书啊!

    …

你恐怕感兴趣的稿子:

  • Python自然语言处理之词干,词形与最大匹配算法代码详解
  • Python编程使用NLTK举办自然语言处理详解
  • 用Python举办部分简易的自然语言处理的学科
  • Python中有的自然语言工具的行使的入门教程
  • python自然语言编码转换模块codecs介绍
  • 在Python中拔取NLTK库完结对词干的领到的教程

 

NLP的应用

    regex = re.compile(‘[%s]’ % re.escape(string.punctuation))

这几个海量数据足以揭破很多光景,打个比方说,巴西人对成品 A
感到知足,而奥地利人却对产品 B
更感兴趣。通过NLP,那类的消息方可即时得到(即实时结果)。例如,搜索引擎正是一种
NLP,可以在不利的年月给方便的人提供适当的结果。

 

from nltk.corpus import wordnet
synonyms = []
for syn in wordnet.synsets('Computer'):
  for lemma in syn.lemmas():
    synonyms.append(lemma.name())
print(synonyms)

      f = open(cats_file, ‘r’)

那将打开 NLTK 下载器来挑选必要安装的软件包。

        classifier = nltk.NaiveBayesClassifier.train(training_set)

WordNet 包含了众多词的概念:

 

[‘Hello Adam, how are you?’, ‘I hope everything is going well.’,
‘Today is a good day, see you dude.’]

老是在3个 shell 窗口使用你的品种时,都需求 “得到”
您的虚拟环境激活脚本。请小心,在激活脚本被获取后,shell
提醒符会改变。当在你的种类上创造和接纳 shell
窗口,轻松地导航到你的系列目录,并运营其虚拟环境时,您只怕想在你的
~/.bash_profile 文件中丰裕以下条目:

Great!结果棒极了。然后大家品尝运用词语标记器来看望它是如何是好事的:

 

本文实例讲述了Python自然语言处理 NLTK
库用法。分享给大家供大家参考,具体如下:

清单 4. locomotive/__init__.py 

词干化和词化差别

14

小编们生活中不时会触发的自然语言处理的采纳,包涵语音识别,语音翻译,了解句意,领会特定词语的同义词,以及写出语法正确,句意通畅的句子和段子。

 

结果或许是同义词或享有同样含义的不等词语。有时,若是您准备还原一个词,比如
playing,还原的结果还是playing。那是因为暗许还原的结果是名词,倘使你想博得动词,可以通过以下的点子指定。

02

 increase

07

from nltk.corpus import wordnet
syn = wordnet.synsets("pain")
print(syn[0].definition())
print(syn[0].examples())

02

from nltk.stem import SnowballStemmer
print(SnowballStemmer.languages)
'danish', 'dutch', 'english', 'finnish', 'french', 'german', 'hungarian', 'italian', 'norwegian', 'porter', 'portuguese', 'romanian', 'russian', 'spanish', 'swedish'

      features = item.features(top_words)

Cool!

22

即便你利用的是 Windows , Linux 或 Mac,你可以
使用PIP安装NLTK:
# pip install nltk

 

拔取 NLTK 对文本分词

5

那就是说 NLP 到底是怎么样?学习 NLP 能带来哪些利益?

    category_associations_test.py

[‘computer’, ‘computing_machine’, ‘computing_device’,
‘data_processor’, ‘electronic_computer’,
‘information_processing_system’, ‘calculator’, ‘reckoner’,
‘figurer’, ‘estimator’, ‘computer’]

03

越来越多关于Python相关内容感兴趣的读者可查阅本站专题:《Python数学运算技巧计算》、《Python数据结构与算法教程》、《Python函数使用技术总括》、《Python字符串操作技能汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

09

从 WordNet 获取同义词

 

NLTK词干提取

        training_set = []

单词词干提取就是从单词中去除词缀并重回词根。(比方说 working 的词干是
work。)搜索引擎在目录页面的时候利用那种技能,所以重重人通过同三个单词的不等款式开展搜寻,重返的都以同样的,有关这些词干的页面。

08

输出如下所示:

自然语言是无规律的

结果是:

 

[‘Bonjour M. Adam, comment allez-vous?’, “J’espère que tout va
bien.”, “Aujourd’hui est un bon jour.”]

        … additional logic …

您可以行使 WordNet 来赢得同义词:

3

在本文撰写之时,你能够在 Python 2.7 , 3.4 和 3.5
上都可以选择NLTK。或许可以因此得到tar
举办源码安装。

5

结果是: 

03

the branch of information science that deals with natural language
information
large Old World boas

1

Hello Adam, how are you? I hope everything is going well.  Today is a
good day, see you dude.

08

  • 探寻引擎,比如谷歌,雅虎等等。谷歌等寻找引擎会通过NLP明白到您是一个科学和技术感冒友,所以它会回去科技(science and technology)相关的结果。
  • 社交网站消息流,比如 Facebook的新闻流。音讯馈送算法通过自然语言处理精晓到你的兴味,并向您来得相关的广告以及音讯,而不是部分毫无干系的音信。
  • 语音助手,诸如苹果 Siri。
  • 垃圾邮件程序,比如 谷歌(Google) 的垃圾邮件过滤程序
    ,那不不过普通会用到的一般的垃圾邮件过滤,以后,垃圾邮件过滤器会对电子邮件的始末展开剖析,看看该邮件是还是不是是垃圾邮件。

                t2s = t2.strip().lower()

词干提取的章程可以在不通晓语境的事态下对词汇使用,那就是为何它相较词形还原方法速度更快但准确率更低。

        return list

from nltk.stem import SnowballStemmer
french_stemmer = SnowballStemmer('french')
print(french_stemmer.stem("French word"))

07

from nltk.tokenize import sent_tokenize
mytext = "Hello Adam, how are you? I hope everything is going well. Today is a good day, see you dude."
print(sent_tokenize(mytext))

5

import urllib.request
response = urllib.request.urlopen('http://php.net/')
html = response.read()
print (html)

 

SnowballStemmer 类,除了克罗地亚语外,还足以适用于其余 13
种语言。扶助的言语如下:

提出。根据类似项目标体察来指出使用的项

from nltk.stem import WordNetLemmatizer
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
lemmatizer = WordNetLemmatizer()
print(stemmer.stem('stones'))
print(stemmer.stem('speaking'))
print(stemmer.stem('bedroom'))
print(stemmer.stem('jokes'))
print(stemmer.stem('lisa'))
print(stemmer.stem('purple'))
print('----------------------')
print(lemmatizer.lemmatize('stones'))
print(lemmatizer.lemmatize('speaking'))
print(lemmatizer.lemmatize('bedroom'))
print(lemmatizer.lemmatize('jokes'))
print(lemmatizer.lemmatize('lisa'))
print(lemmatizer.lemmatize('purple'))

 

从图中,你可以一定那篇小说正在谈论 PHP。这很棒!有部分词,如”the,” “of,”
“a,” “an,”
等等。那么些词是为止词。一般的话,截至词语应该被剔除,以预防它们影响我们的结果。

          self.assertTrue(‘feed://news.yahoo.com/rss/stock-markets’
infeeds_list)

清单 1. Main 检测 

07

    start_time = time.time()

        app = locomotive.app.Application()

def read_reuters_metadata(self, cats_file):

接下去,小编采访了锻炼集的 ENCORESS
提要项目和它们分其余特色,并将它们传递给算法。清单 9
中的代码演示了这一个任务。请小心,分类器被教练成为唯有一行代码。

里面一个技术是在特色集内包含常见的双字词(多少个单词为一组)和三字词(多个单词为一组)。NLTK
以nltk.bigrams(…)和nltk.trigrams(…)的花样对此提供了援救,以往大家对此相应不再感觉讶异了。正如可以从陶冶数据组收集最常用的
n 个单词那样,也得以识别最常用的双字词和三字词,并将它们当做天性。

        list = f.readlines()

      def test_development_feeds_list(self):

Mahout 和 Ruby 的选择

不过,俄语那种语言包罗超越 250,000 个单词。当然,作者不期望为了将 凯雷德SS
提要项目传递给算法就要为各种 锐界SS 提要项目创制四个涵盖 250,000
个布尔值的对象。那么,作者会使用什么单词?简单的话,答案是在培育数据组中除去停用词之外最广大的单词。NLTK
提供了3个佳绩的类,即nltk.probability.FreqDist,小编得以用它来甄别那些最常用的单词。在
清单 8
中,collect_all_words方法重临来自具备培训作品的保有单词的一个数组。

20

9

自家实在须求的是一个装有语法杰出体现、代码完毕和断点调试功效的三合一开发环境
(IDE),用该环境救助本身左右小编的 Python 学习曲线。作为利用 Eclipse IDE 进行Java
开发的一名用户,pyeclipse插件是自家设想的下贰个工具。即便该插件有时比较慢,但它工作得一定不错。作者最终投资了
PyCharm IDE,它满意了作者的富有 IDE 要求。

 

近日,小编收到一项任务,须要为客户创立一个 RAV4SS
提要分类子系统。目的是读取几十三个甚至几百个 CRUISERSS
提要,将它们的诸多稿子自动分类到几拾2个预约义的核心领域当中。客户网站的内容、导航和寻找功用都将由那几个天天活动提要物色和归类结果驱动。

 

兑现解决方案涉及捕获模拟的 中华VSS
提要、整理其文件、使用3个NaiveBayesClassifier和 kNN
算法对项目举办分类。上边将会介绍那几个操作中的每1个。

        f = open(‘data/feed_’ + str(feed_index) + ‘.pkl’, ‘w’)

print feedparser.parse(“”)

 

    import category_associations

      def setUp(self):

前不久,小编收到一项职务,须求为客户创建一个 LANDSS
提要分类子系统。目标是读取几1三个甚至几百个 翼虎SS
提要,将它们的诸多篇章自动分类到几十一个预订义的宗旨领域当中。客户网站的始末、导航和查找效果都将由那一个每一日活动提要寻找和归类结果驱动。

11

    import time        # >– system library

 

    regex = re.compile(‘[%s]’ % re.escape(string.punctuation))

 

 

运行程序

3

21

    category_associations.py

    def normalized_words(self, article_text):

locomotive_tests.py

只需这一行代码就足以从 NLTK 拿到停用词列表;并且还协理任何自然语言:

1

      all_words = []

      return features

$ pip install nltk

简介: 机器学习取决于
IT、数学和自然语言的因陋就简,在大数量应用程序中会常常用到机械学习。本文将研究Python 编程语言和它的 NLTK 库,然后将它们采纳于二个机械学习项目。

何以是机械学习?

18

只需这一行代码就可以从 NLTK 得到停用词列表;并且还接济任何自然语言:

代码库结构

            featuresets.append(tup)

 

import feedparser

15

    __init__.py

 

NaiveBayesClassifier在运作中的 Python
程序的内存中,它未来是经过操练的。今后,笔者只需遍历需求开展分拣的 库罗德SS
提要项目集,并必要分类器臆度每种门类的项目。那很简单。

01

1

你的结果会双管齐下

    feed_item_test.pyc

 

03

        toks1   = cleaned.split()

追寻机器学习的书籍,并更长远钻研它们的目录,小编发现,有一定高比例的此类系统在行使
Python 作为其完结语言,并动用了二个被叫作 Natural Language
Toolkit(NLTK,自然语言工具包)的库。通过越发的搜索,作者意识 Python
的使用比小编发觉到的还要广泛,如 谷歌 App Engine、YouTube 和利用 Django
框架创设的网站。它甚至还预安装在小编每一天都选取的 Mac OS X
工作站上!此外,Python 为数学、科学和工程提供了风趣的标准库(例如,NumPy
和 SciPy)。

    def normalized_words(self, article_text):

$ pip install nltk

清单 6. CaptureFeeds 类 

02

 

def read_reuters_metadata(self, cats_file):

11

            translated = self.regex.sub(”, t1)

import sys

    feed_item_test.pyc

23

 

virtualenv

发表评论

电子邮件地址不会被公开。 必填项已用*标注