自然语言处理3.1——从网络和硬盘访问文本

Posted 波比12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自然语言处理3.1——从网络和硬盘访问文本相关的知识,希望对你有一定的参考价值。

文本的最重要来源无疑是网络。探索现成的文本集合是很方便的,然而每个人都有自己的文本来源,需要学习如何去访问他们。

首先,我们要学习从网络和硬盘访问文本。

1.电子书

NLTk语料库集合中存有古腾堡项目的一小部分样例文本,如果你对古腾堡项目其他的文本感兴趣,可以在http://www.gutenberg.org/catalog/上浏览其他书籍

下面以编号2554的文本《罪与罚》为例,简单介绍怎么通过Python访问

-*- encoding:utf-8 -*-
from urllib.request import urlopen
import nltk
url=r‘http://www.gutenberg.org/files/2554/2554.txt‘
raw=str(urlopen(url).read(),encoding=‘utf-8‘)
print(type(raw))

 此时输出为<class ‘str‘>

>>>print(raw[:75])
The Project Gutenberg EBook of Crime and Punishment, by Fyodor Dostoevsky
>>>print(len(raw))
1176831

 变量raw包含了1176831个字符,这是这本书的原始内容,但是其中有很多我们不关系的细节,例如空格,换行符等等。对于语言处理,要将字符串分解为词和标点符号,这一过程我们成为分词,用于产生词汇和标点符号的列表。

>>>token=nltk.word_tokenize(raw)
>>>print(type(token))
<class ‘list‘>
>>>print(len(token))
254352
>>>print(token[:10])
[‘The‘, ‘Project‘, ‘Gutenberg‘, ‘EBook‘, ‘of‘, ‘Crime‘, ‘and‘, ‘Punishment‘, ‘,‘, ‘by‘]

 请注意,NLTK需要分词,但之前打开的URL读入字符串任务都没有进行分词。如果进一步在链表中创建NLTK文本,便可以进行一些常规的链表操作,例如切片

>>>text=nltk.Text(token)
>>>print(text[1020:1060])
[‘AND‘, ‘PUNISHMENT‘, ‘PART‘, ‘I‘, ‘CHAPTER‘, ‘I‘, ‘On‘, ‘an‘, ‘exceptionally‘, ‘hot‘, ‘evening‘,
‘early‘, ‘in‘, ‘July‘, ‘a‘, ‘young‘, ‘man‘, ‘came‘, ‘out‘, ‘of‘, ‘the‘, ‘garret‘, ‘in‘, ‘which‘, ‘he‘, ‘lodged‘,
‘in‘, ‘S.‘, ‘Place‘, ‘and‘, ‘walked‘, ‘slowly‘, ‘,‘, ‘as‘, ‘though‘, ‘in‘, ‘hesitation‘, ‘,‘, ‘towards‘, ‘K.‘] >>>print(text.collocations()) Katerina Ivanovna; Pyotr Petrovitch; Pulcheria Alexandrovna; Avdotya Romanovna; Rodion Romanovitch; Marfa Petrovna; Sofya Semyonovna; old woman; Project Gutenberg-tm; Porfiry Petrovitch; Amalia Ivanovna; great deal; Nikodim Fomitch; young man; Ilya Petrovitch; n‘t know; Project Gutenberg; Dmitri Prokofitch; Andrey Semyonovitch; Hay Market

 下面我们介绍find和rfind函数

例如,古腾堡项目下载的文本都包含一个首部,里面有文本的名称、作者等等。因此在原始文本中挑选内容之前,需要手工检查文件来发现标记内容开始和结尾的特定字符串。

>>>start=raw.find(‘PART I‘)
>>>end=raw.rfind("End of Project Gutenberg‘s Crime" )
>>>raw=raw[start:end]
>>>print(raw.find(‘PART I‘))
0

 函数find()和rfind()(反向的find)用于获取字符串切片所在的索引值。

以上是关于自然语言处理3.1——从网络和硬盘访问文本的主要内容,如果未能解决你的问题,请参考以下文章

文本分类

hadoop 集群调优实践总结

NLP循环神经网络基础

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

访问嵌套片段的文本字段

自然语言处理入门实战——基于循环神经网络RNNLSTMGRU的文本分类(超级详细,学不会找我!!!)