菜单

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

2019年2月6日 - 金沙编程资讯

什么让使用者定制专有名词数据

先前期间的代码如下:

/**
 * 专有名词使用正确的大小写
 * 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;
}

词汇的词汇化与提取词干类似,但不相同之处在于词汇化的结果是一个真正的词汇。与词干提取差别,当您准备提取部分词干时,有可能会促成那样的情形:

<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;
}
?>

 

什么样防止过度替换

在自我认为就要水到渠成的时候,我用事先写好的 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;
}
import nltk
nltk.download()

复制代码 代码如下:

自我须求运用更加多的多寡,而且这一个多少必须已进行了可相信的归类,那种意况很快就变得肯定。我可以在哪个地方找到那样的数码吧?进入
Python
NLTK。除了是一个上佳的语言文本处理库之外,它依旧还蕴藏可下载的以身作则数据集,或是其术语中的文集,
以及可以轻松访问此下载数据的应用程序编程接口。要设置 Reuters
文集,可以运作如下所示的下令。会有当先 10,000 篇新闻小说将下载到您的
~/nltk_data/corpora/reuters/ 目录中。与 RSS 提要项目雷同,每篇 Reuters
音讯著作中都涵盖一个标题和一个正文,所以那些 NLTK
预分类的数目万分适合于模拟 RSS 提要。

什么改正和优化代码逻辑

我在写这几个功能的时候,也在研商和参考一些存世开源项目的落实逻辑。在寓目开源项目
auto-correct 的一个
commit
上后(PS:这一个 PR 是社区大神 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;
}
from nltk.corpus import wordnet
syn = wordnet.synsets("pain")
print(syn[0].definition())
print(syn[0].examples())

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

09

说到底的话

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

在我看来,词形还原比提取词干的主意更好。词形还原,如果实在不可能回去那几个词的变形,也会回来另一个确实的单词;这一个单词可能是一个同义词,但好歹那是一个当真的单词。当有时候,你不关切准确度,须要的只是速度。在这种情形下,词干提取的格局更好。

你或许感兴趣的作品:

 

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))

3

开发计算

NLP的作用

 

本篇小说不是为了记开发流水账,而是想把开发进程的遭受的难点以及缓解思路和豪门展开互换和读书。我是一名普普通通的
PHP
工程师,希望对初级开发同学有所支持。具体的心体面会晤文末的总结

输出是:

    if len(sys.argv) > 1:

本月中,我在 GitHub
上开源了一个自己的小品种:chinese-typesetting。那是一个改正粤语文案排版的
Composer 包。

对于使用 NLTK Reuters 小说数据模拟的 RSS
提要项目,我急需规定每个项目标类型。为此,我读取前边提到的
~/nltk_data/corpora/reuters/cats.txt 文件。用 Python
读取一个文书相当简单,如下所示:

chinese-typesetting
包涵以下效率:

设若您现在检查图表,会感觉到比以前那张图标越发清楚,因为没有了为止词的侵扰。

          for w in item.all_words:

意大利语专有名词的多少来源于

先是,面临的第二个难题是:

意国语专知名词的数目从哪来?

本身第一想到的是 Python 有一个自然语言处理的包
NLTK,这些包有个名为 pos_tag
的函数,可以用来鉴别并标注每个单词的词性,其中被标明为 NNP 或 NNPS
的单词就是专盛名词(Proper Noun)。我估算,NLTK
数据包里应该有一个应和的专盛名词数据集,可是,苦于能力有限,我一向尚未找到。

上述的门路走不通后,我又通过 谷歌搜索,发现经过互联网字典来获取数据是一条有效的方案。通过这一方法,终于在
Wiktionary
找到了韩语专盛名词列表。于是,利用 Python
写了一个爬虫小本子,爬取了对应的多寡。

末尾,就是对爬取到的数量举行了部分整理和筛选。

筛选方案如下:

从图中,你可以毫无疑问那篇作品正在研讨 PHP。那很棒!有一对词,如”the,” “of,”
“a,” “an,”
等等。这一个词是甘休词。一般的话,甘休词语应该被剔除,以防患它们影响我们的结果。

04

本周,公司支出业务不多,无加班,于是开头思索新作用考订乌Crane语专闻名词大小写的实现。

输出如下所示:

23

今昔,倘使大家试图用NLTK WordNet来平复同一个词,结果会是正确的:

22

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

21

在那篇小说中,我们将依据 Python
切磋自然语言处理(NLP)。本学科将会使用 Python NLTK 库。NLTK
是一个当即风行的,用于自然语言处理的 Python 库。

01

play
playing
playing
playing

16

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'))

for item in rss_items_to_classify:

结果是:

02

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))

    feed_item_test.pyc

选用 NLTK 对文件分词

 

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

11

透过 NLTK 你可以收获给定词的概念和例句:

    __init__.py

结果很清楚。

Python 使用 清单 1 中的if __name__ ==
“__main__”:语法来确定文件本身是从命令行执行的要么从其余代码导入的。为了让文件变得足以执行,需求加上”__main__”检测。

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

1

使用 NLTK 删除停止词

06

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"))

RSS 提要分类算法的原来输入,当然是以塞尔维亚共和国(Republic of Serbia)语书写的公文。原始,确实那样。

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

class AppTest(unittest.TestCase):

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

1

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

 

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

def features(self, top_words):

最终,让大家由此以下情势将文件分词:

      all_words = []

词干化和词化差别

          feeds_list = self.app.development_feeds_list()

要是大家有如下的演示文本:

22

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

        classifier = nltk.NaiveBayesClassifier.train(training_set)

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)

 

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

 

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

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

10

从 WordNet 获取同义词

06

increas

locomotive_main.py

说到底的代码应该是这么的:

 

大家在本 NLP
教程中商讨的富有手续都关系到文本预处理。在将来的作品中,大家将探讨使用Python
NLTK进行文本分析。

07

NLTK词干提取

06

您可以在此地查看Python List
函数, 
精晓怎么处理列表。

04

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

4

来源法国的意中人欢迎在评论区 poll 出你们测试的结果!

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

出口如下:

自身继续查找解决方案,并且在结果集中平昔遇到 “Python”。作为一名 Ruby
开发人士,即便本人还并未学过该语言,但本身也知道 Python
是一个面向相似对象的、基于文本的、可明白和动态的编程语言。即便三种语言之间存在一些相似之处,但自身多年来都忽略了读书
Python,将它就是一项多余的技巧集。Python 是自个儿的 “盲点”,我难以置信许多 Ruby
开发人员同行都是这样认为的。

我们生存中不时会触发的自然语言处理的利用,包涵语音识别,语音翻译,了然句意,驾驭特定词语的同义词,以及写出语法正确,句意通畅的句子和段落。

 

出口如下:

          self.assertTrue(len(feeds_list) == 15)

结果是: 

16

以下都是自然语言处理(NLP)的有些打响利用:

7

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

locomotive/

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

清单 3. 示范目录结构 

为了标记其余语言,可以像这样指定语言:

07

结果将是那般的:

def collect_all_words(self, items):

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

    rss_item_test.py

明日有诸多开源的自然语言处理(NLP)库。比如:

中间一个技能是在特色集内包罗周边的双字词(多少个单词为一组)和三字词(两个单词为一组)。NLTK
以nltk.bigrams(…)和nltk.trigrams(…)的款式对此提供了支撑,现在大家对此应当不再感觉惊奇了。正如可以从锻炼数据组收集最常用的
n 个单词那样,也足以分辨最常用的双字词和三字词,并将它们当做特性。

您能够用绘图函数为那一个词频绘制一个图片: freq.plot(20, cumulative=False)

            tup = (features, item.category)  # tup is a 2-element tuple

安装 NLTK

7

标记不合规语语言文本

if __name__ == “__main__”:

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

10

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)

        list = f.readlines()

金沙国际,a symptom of some physical hurt or disorder
[‘the patient developed severe pain and distension’]

01

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

4

你能够应用 WordNet 来获取同义词:

def read_reuters_metadata(self, cats_file):

从 WordNet 获取反义词

02

结果是:

运用 k-Nearest Neighbors 算法指出提议

stone
speak
bedroom
joke
lisa

purpl

stone
speaking
bedroom
joke
lisa
purple

01

今日的公文相比较从前的 html 文本好多了。我们再选拔 Python NLTK
来测算每个词的出现频率。NLTK 中的FreqDist( ) 函数可以兑现词频计算的功效:

import locomotive

明天,让大家修改我们的代码,并在绘制图形以前清理标记。首先,咱们复制一个列表。然后,大家透过对列表中的标记举行遍历并剔除其中的终止词:

发现 Python 和 NLTK

您或许感兴趣的文章:

 

Great!结果棒极了。然后我们尝试利用词语标记器来看看它是如何工作的:

客户提出使用机器学习,或许还会接纳 Apache Mahout 和 Hadoop
来落到实处该义务,因为客户近期读书了有关那些技能的篇章。不过,客户的付出集团和我们的开发协会都更熟知Ruby,而不是 Java™
技术。本文将介绍解决方案的技艺之旅、学习进程和末段促成。

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

5

呃!Mr. 是一个词,纵然带有一个符号。让大家来试试使用 NLTK 举行分词:

自身控制实施一个 Python
解决方案,因为我找到了要命好的编码示例。例如,下边这一行代码就是经过
HTTP 读取 RSS 提要并打印其情节所需的所有代码:

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

发现 Python 和 NLTK

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

08

你可以采取设置具有的软件包,因为它们的容量不大,所以没有何样难点。现在,大家开头攻读呢!

 

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

            self.capture_as_pickled_feed(url.strip(), i)

还有别的一些提取算法,如 Lancaster 提取算法。那些算法的出口同 Porter
算法的结果在多少个单词上差距。你可以品尝他们五个算法来查看有哪些不相同结果。

比如,我利用的样例提要包含了体育电视机网络店铺 ESPN。提要的品种之一是有关
Denver Broncos 橄榄球队的 提姆 Tebow 被转载到 New York Jets
橄榄球队,在同一时间,Broncos 签了她们新的四分卫 Peyton
Manning。提要结果中的另一个品种是 Boeing Company 和它的新喷气式飞机
(jet)。所以,那里的标题是,应该将怎么着实际的品类值分配给首个故事?tebow、broncos、manning、jets、quarterback、trade和nfl那几个值都是适当的。但唯有一个值可以在教练多少中被指定为陶冶多少体系。同样,在其次个故事中,体系应该是boeing如故jet?困难的一对在于这个细节。假使您的算法要发生精确的结果,那么大型操练数据集的精确手工分类分外主要。要做到那一点,不应当低估所需的小时。

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)

工具

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

4

梦想本文所述对我们Python程序设计有所帮忙。

        toks1   = cleaned.split()

从打印输出中得以见见,结果中涵盖众多索要清理的HTML标记。我们可以用那一个 
BeautifulSoup 库来对抓取的文书进行处理:

可是,保加利亚共和国(The Republic of Bulgaria)语那种语言包蕴超越 250,000 个单词。当然,我不期望为了将 RSS
提要项目传递给算法就要为每个 RSS 提要项目创设一个含有 250,000
个布尔值的靶子。那么,我会使用什么单词?不难的话,答案是在培育数据组中除去停用词之外最常见的单词。NLTK
提供了一个名特优的类,即nltk.probability.FreqDist,我得以用它来甄别这几个最常用的单词。在
清单 8
中,collect_all_words方法重返来自具备培训作品的持有单词的一个数组。

结果是:

Identifier> reuters    # specify the ‘reuters’ corpus

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))

    import category_associations

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

 

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"))

清单 8. 使用 nltk.FreqDist 类 

我们正好驾驭了怎么利用 split( ) 函数将文件分割为标记
。现在,大家将看到什么样运用 NLTK
对文本进行标记化。对文件进行标记化是很关键的,因为文件不能在一直不进展标记化的状态下被拍卖。标记化意味着将较大的局部分隔成更小的单元。

为了显示在您的连串上已设置的 Python 库的列表,请运行以下命令:

利用 WordNet 引入词汇

        for item in rss_items:

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))

      for item in items:

结果是:

1

不过搜索引擎并不是自然语言处理(NLP)的绝无仅有运用。还有更好进而卓越的行使。

05

词频总结

测试

你可能会说,那是一件不难的业务。我不须求使用 NLTK
标记器,并且自己得以行使正则表达式来划分句子,因为各种句子前后都有标点符号或者空格。

 

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

18

单词词干提取就是从单词中去除词缀并回到词根。(比方说 working 的词干是
work。)搜索引擎在目录页面的时候利用这种技能,所以众四人通过同一个单词的例外款型展开检索,重回的都是相同的,有关这些词干的页面。

清单 2. 选取 virualenv 创造一个虚拟环境的命令 

结果是:

import feedparser

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

 

简短的说,自然语言处理( NLP
)就是支付可以明白人类语言的应用程序和服务。

          features[“w_%s” % w] = (w in word_set)

领取非立陶宛(Lithuania)语单词词干

 

那么 NLP 到底是什么样?学习 NLP 能推动什么样便宜?

3

词干提取的艺术可以在不明了语境的意况下对词汇使用,这就是干吗它相较词形还原方法速度更快但准确率更低。

locomotive_tests.py

NLTk 对其他非印度语印尼语语言的支撑也更加好!

02

若是您还记得大家使用 nltk.download( ) 安装 NLTK
的增加包时。其中一个扩大包名为 WordNet。WordNet
是为自然语言处理营造的数据库。它蕴含部分词语的一个同义词组和一个简易的概念。

    import news

万一你使用的是 Windows , Linux 或 Mac,你能够
使用PIP安装NLTK:
# pip install nltk

12

选拔原生 Python 来对文本举办分词

1

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

1

如若您查看输出结果,会发觉最常用的词语是PHP。

  def identify_top_words(self, all_words):

Cool!

 

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

    …

那么,看看上边的文字:

            for t2 in toks2:

结果是: 

 

WordNet 蕴涵了多如牛毛词的概念:

                t2s = t2.strip().lower()

 increase

      category = classifier.classify(feat)

结果可能是同义词或具备相同含义的两样词语。有时,若是你打算復苏一个词,比如
playing,还原的结果要么
playing。那是因为默许还原的结果是名词,如若您想取得动词,可以因而以下的方法指定。

      def test_development_feeds_list(self):

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))

分类。根据类似项目标一组陶冶多少,将相关的项分配到任意预订义的品种

NLP的应用

19

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

该项目越发具有挑衅性,因为客户还未曾概念目标 RSS
提要列表。由此,也不存在
“陶冶多少”。所以,在起来开发时期总得模拟提要和教练多少。

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

4

正如所料,Mr. 是一个词,也的确被 NLTK 当做一个词。NLTK使用
nltk.tokenize.punkt module 中的  PunktSentenceTokenizer
举行文本分词。那些标记器经过了良好的训练,可以对二种语言进行分词 。

        return list

为了将这一个文件标记化为句子,大家可以接纳句子标记器:

6

那些海量数据足以揭破很多处境,打个比方说,巴西人对成品 A
感到满意,而美利坚同盟国人却对产品 B
更感兴趣。通过NLP,那类的音讯方可即时收获(即实时结果)。例如,搜索引擎正是一种
NLP,可以在不利的时间给方便的人提供合适的结果。

            tup = (features, item.category)  # tup is a 2-element tuple

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

 

结果是:

 

SnowballStemmer 类,除了克罗地亚语外,还能适用于别的 13
种语言。帮助的言语如下:

import sys         # >– system library

在那一个 NLP 教程中,我们将应用 Python NLTK 库。在起头设置  NLTK
以前,我如若你通晓有些
Python入门知识。

      def test_development_feeds_list(self):

有为数不少铺面热衷收集所有这一个数量,以便更好地精晓他们的用户和用户对产品的热心肠,并对她们的制品如故服务进行适度的调动。

04

事实上,那是一个不胜好的文件压缩水平。最后收缩到原文本的 50% 到 60%
左右。结果可能是动词,名词,形容词或副词:

 

NLP库

 

输出是:

 

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

        training_set = []

假定你安装了 NLTK,你可以运作上边的代码来安装 NLTK 包:

 

NLTK 具有大多数语言的终止词表。要赢得英文甘休词,你可以利用以下代码:

工具

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

6

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

03

work

10

您可以用同一的主意得到单词的反义词。你唯一要做的是在将 lemmas
的结果到场数组从前,检查结果是或不是真的是一个不易的反义词。

 

play

追究 Python、NLTK 和机具学习向来是一个有意思的、令人欢乐的经验。Python
语言强大而又简单,现在已化作我的开发工具包的主干部分。它万分适合于机器学习、自然语言和数学/科学应用程序。固然本文中并不曾提到,但我还发现
Python 对于图片和制图非凡实用。即使 Python
同样是您的盲点,我提出你精晓一下它。

freq.plot(20,cumulative=False)

locomotive_tests/

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

NLTK 还提供了有些 “词干分析器”
类,以便进一步规范化单词。请查看有关词干、词形归并、句子结构和语法的
NLTK 文档,通晓关于的越来越多音讯。

要检查 NLTK
是或不是正确地安装已毕,可以打开你的Python终端并输入以下内容:Import
nltk。假使一切顺遂,那意味你已经打响安装了 NLTK 库。

3

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

04

进行 Python 程序一样很粗略。获得一个称呼为 locomotive_main.py
的程序和多少个参数,然后您就足以接纳 Python 程序编译并施行它:

13

05

        oneline = article_text.replace(‘\n’, ‘ ‘)

    import category_associations

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

    news.py

17

 

13

03

    def rss_feeds_list(self):

 

08

17

                else:

 

10

        words   = []

test/14828 grain

Python Package Index (pip) 是 Python
的专业软件包管理器。您可以使用该程序将库添加到你的系统。它好像于 Ruby
库的 gem。为了将 NLTK 库添加到你的系统,您可以输入以下命令:

清单 4. locomotive/__init__.py 

      features = item.features(top_words)

在支配了 Python
及其生态系统的基本知识之后,终于来临初步落到实处机械学习解决方案的时候。

09

 

3

        return words

      f.close()

        … additional logic …

 

03

2

03

2

print feedparser.parse(“”)

18

13

3

15

清单 1. Main 检测 

 

14

def read_reuters_metadata(self, cats_file):

 

        f.close

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

16

03

算法在 NLTK 中被大规模接纳并行使nltk.NaiveBayesClassifier类已毕。Bayes
算法按照特性在其数量集中的各样存在或不设有对品种展开分拣。在 RSS
提要项目标景观下,每一个特性都是自然语言的一个加以的(清洁过的)单词。该算法是
“朴实” 的,因为它借使特性(在本例中,单词)之间平素不别的关系。

 

08

4

1

 

 

2

 

import pickle

3

14

09

 

if __name__ == “__main__”:

        app = locomotive.app.Application()

接下去,我搜集了训练集的 RSS
提要项目和它们各自的特征,并将它们传递给算法。清单 9
中的代码演示了那么些义务。请小心,分类器被陶冶成为唯有一行代码。

03

locomotive/

清单 4. locomotive/__init__.py 

    import app

virtualenv

 

06

      category = classifier.classify(feat)

相关文章

发表评论

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

网站地图xml地图