本章的目的是要回答下列问题:

(1) 怎样才能编写程序访问本地和网络上的文件,从而获得无限的语言材料?

(2)如何把文档分割成单独的单词和标点符号,并进行文本语料上分析?

(3)怎样编写程序产生格式化的输出,并把结果保存在文件中?

为了解决这些问题,本章将介绍NLP的重要概念,包括分词和词干提取.在过程中,巩固Python知识并且学习关于字符串,文件和正则表达式的知识.网络上的文本都是HTML格式的,我们将学习如何使用HTML

一,从网络和硬盘访问文本

#处理电子书 txt

古腾堡项目http://www.gutenberg.org/catalog/有25000本免费在线书籍的目录

编号2554的文本是<罪与罚>

from urllib import urlopen
url = "http://www.gutenberg.org/files/2554/2554-0.txt"
raw = urlopen(url).read()
type(raw)

   str
len(raw)
   
1201733
raw = raw.replace('\xef\xbb\xbf','')

raw[:75]

'The Project Gutenberg EBook of Crime and Punishment, by Fyodor Dostoevsky\r\n\'

分词

import nltk

import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

tokens = nltk.word_tokenize(raw)

type(tokens)

list

len(tokens)

244761

tokens[:15]

['\xef','\xbb','\xbfThe','Project','Gutenberg'
在链表中创建NLTK文本

text = nltk.Text(tokens)

type(text)

text[1020:1060]

text.collocations()

raw.find("PART I")

5381

raw.rfind("End of Project Gutenberg’s Crime")

1182515

raw = raw[5381:1182515]

raw.find("PART I")

0

#处理HTML

url = "http://news.bbc.co.uk/2/hi/health/2284783.stm"
html = urlopen(url).read()
html[:60]

'<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN'

#raw = nltk.clean_html(html)

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
raw = soup.get_text()

tokens = nltk.word_tokenize(raw)

tokens

[u'BBC',u'NEWS',u'|',u'Health',u'|',

#处理搜索引擎的结果

网络可以被看做未经标注的巨大语料库

#处理RSS订阅

http://feedparser.org

#读取本地文件

import sys

#从PDF,MS word及其他二进制格式中提取文本

使用pypdf和pywin32

#捕获用户输入

s = raw_input("Enter some text: ")

#NLP的流程

二, 字符串: 最底层的文本处理

#链表与字符串的差异

字符串和链表都是一种序列.可以通过索引抽取它们中的一部分,可以给它们切片,也可以使用连接将它们合并在一起,但是,字符串和链表之间不能连接

query = 'Who knows?'

beatles = ['John', 'Paul', 'George', 'Ringo']

query[0] = 'F'  #不可变

beatles[0] = 'F' #可变的

三, 使用Unicode进行文字处理

#从文件中提取已编码文本

import   codecs

f = codecs.open(path, encoding='utf8')

四  使用正则表达式检测词组搭配

五 正则表达式的有益应用

#提取字符块

找出文本中两个或两个以上的元音序列,并确定它们的相对频率

import re
wsj = sorted(set(nltk.corpus.treebank.words()))
fd = nltk.FreqDist(vs for word in wsj for vs in re.findall(r'[aeiou]{2,}', word))
fd.items()

#在字符块上做更多事情

#查找词干

查询"laptops"会找到含有"laptop"的文档

def stem(word):
    for suffix in ['ing','ly','ed','ious','ies','ive','es','s','ment']:
        if word.endswith(suffix):
            return word[:-len(suffix)]
    return word

使用正则表达式

#搜索已分词文本

这种自动和人工处理相结合的方式是最常见的建造新语料库的方式

六 规范化文本

raw = """DENNIS:Listen, strange women lying in ponds distributing swords is no basis for a system of government. Supreme executive power derives from a mandate from the masses, not from some farcical aquatic ceremony."""

tokens = nltk.word_tokenize(raw)

#词干提取器

porter = nltk.PorterStemmer()
lancaster = nltk.LancasterStemmer()
[porter.stem(t) for t in tokens]
[u'denni',':','listen',',',u'strang',

#词形归并

wnl = nltk.WordNetLemmatizer()
[wnl.lemmatize(t) for t in tokens]
['DENNIS',':','Listen',',','strange',u'woman','lying',

七 用正则表达式为文本分词

#分词的简单方法

re.split(r" ', raw)    #在空格符处分割原始文本

re.split(r'[ \t\n]+', raw)  #同时需要匹配任何数量的空格符\制表符或换行符

八 分割

#断句

sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
text = nltk.corpus.gutenberg.raw('chesterton-thursday.txt')
sents = sent_tokenizer.tokenize(text)
pprint.pprint(sents[171:181])

#分词

九 格式化:从链表到字符串

#从链表到字符串

silly = ['We','called','him','Tortoise','because','he','taught','us','.']
' '.join(silly)
'We called him Tortoise because he taught us .'
';'.join(silly)
'We;called;him;Tortoise;because;he;taught;us;.'
''.join(silly)
'WecalledhimTortoisebecausehetaughtus.'

十 深入阅读

Python自然语言处理 3 处理原始文本相关推荐

  1. Python自然语言处理:轻松上手文本分类

    文本分类是NLP中的常见的重要任务之一,它的主要功能就是将输入的文本以及文本的类别训练出一个模型,使之具有一定的泛化能力,能够对新文本进行较好地预测.它的应用很广泛,在很多领域发挥着重要作用,例如垃圾 ...

  2. Python 自然语言处理:轻松上手文本分类

    喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! 背景介绍 文本分类是NLP中的常见的重要任务之一,它的主要功能就是将输入的文本以及文本的类别训练出一个模型, ...

  3. Python 自然语言处理:轻松上手文本分类!

    背景介绍 文本分类是NLP中的常见的重要任务之一,它的主要功能就是将输入的文本以及文本的类别训练出一个模型,使之具有一定的泛化能力,能够对新文本进行较好地预测.它的应用很广泛,在很多领域发挥着重要作用 ...

  4. 【Python自然语言处理】读书笔记:第三章:处理原始文本

    本章原文链接:https://usyiyi.github.io/nlp-py-2e-zh/3.html 3 处理原始文本 import nltk, re, pprint from nltk impor ...

  5. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第02章 获得文本语料和词汇资源

    第02章 获得文本语料和词汇资源 2.1 获取文本语料库 古腾堡语料库 网络和聊天文本 布朗语料库 路透社语料库 就职演说语料库 标注文本语料库 在其他语言的语料库 文本语料库的结构 载入你自己的语料 ...

  6. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第03章 加工原料文本

    第03章 加工原料文本 3.1 从网络和硬盘访问文本 电子书 处理的HTML 处理搜索引擎的结果 处理RSS 订阅 读取本地文件 从PDF.MS Word 及其他二进制格式中提取文本 捕获用户输入 N ...

  7. Python自然语言处理 | 获得文本语料与词汇资源

    本章解决问题- 什么是有用的文本语料和词汇资源,我们如何使用Python获取它们? 哪些Python结构最适合这项工作? 编写Python代码时我们如何避免重复的工作? 这里写目录标题 1获取文本语料 ...

  8. 《Python自然语言处理》——1.1 语言计算:文本和词汇

    本节书摘来异步社区<Python自然语言处理>一书中的第1章,第1.1节,作者:[美]Steven Bird , Ewan Klein , Edward Loper,更多章节内容可以访问云 ...

  9. 《Python自然语言处理》——第1章 语言处理与Python 1.1 语言计算:文本和词汇...

    本节书摘来自异步社区<Python自然语言处理>一书中的第1章,第1.1节,作者[美]Steven Bird,Ewan Klein,Edward Loper, 陈涛,张旭,崔杨,刘海平 译 ...

  10. python链表划分_《Python自然语言处理》——1.2 近观Python:将文本当做词链表-阿里云开发者社区...

    本节书摘来自异步社区<Python自然语言处理>一书中的第1章,第1.2节,作者[美]Steven Bird,Ewan Klein,Edward Loper, 陈涛,张旭,崔杨,刘海平 译 ...

最新文章

  1. python网络爬虫系列(二)——ProxyHandler处理器实现代理IP
  2. linux共享文件系统sy,Linux使用Samba实现文件共享
  3. 将内存使用的详细情况输出到文件
  4. Adaboost算法结合Haar-like特征
  5. 五种常用的MySQL图形化管理工具
  6. 测度论与概率论基础(程士宏)学习笔记(一)
  7. 共享硬盘没有权限访问计算机,Win7系统打开磁盘共享说“没有访问权限
  8. openflow pox操作命令
  9. nas 微型计算机,商为家用的利器 希捷BS 2- Bay NAS
  10. 期末C语言不挂科之选择题
  11. 产品经理如何写好产品需求文档
  12. 模型的骨骼动画技术讲解
  13. Centos7 快捷键调节屏幕亮度
  14. 在安卓系统上使用NFC技术的模拟M1卡的探索之路
  15. 名帖46 北魏 楷书《镇北大将军元思墓志》
  16. centOS6.8安装VMware tools,请确保您已登录客户机操作系统。在客户机中装载CD驱动器启动终端,使用tar解压缩安装程序,然后执行vmware-insall.pl安装VMware To
  17. 2019年2月星环科技大数据应用开发面试(2年工作经验)
  18. Oacle锁表,ORA-00054
  19. java string数组循环_java数组中String [ ] a={aa,bb,cc};利用for循环进行遍历
  20. git上传文件到腾讯云服务器,我的hexo部署到腾讯云服务器

热门文章

  1. 三消类游戏的核心算法
  2. ADO与ADO.NET 的区别
  3. macOS上显示隐藏文件
  4. fxp连接失败_flashfxp连接提示连接失败 (10061: 连接被拒)与列表错误
  5. fxp连接失败_用FLASHFXP连接站点,总显示连接失败(连接丢失),该怎么办呢
  6. [zkaq靶场]命令执行--IBOS协同办公系统通杀漏洞
  7. win10硬盘锁怎么解除_win10如何使用bitlocker解锁硬盘加密
  8. 计算机运行慢提速小技巧,教你为Win7系统加速的五个技巧
  9. java中人民币的符号怎么打_打印机打印人民币符号¥
  10. 大数据与综合交通规划的金句良言