语料库与python应用 pdf文件_python-nlp ch2笔记2:不同文件格式的语料、免费语料库资源、nlp数据准备流程...

本帖是对(印度)Jalaj Thanaki作品《python自然语言处理》张金超、刘舒曼译本的缩减及改编~

不同文件格式的语料

语料有不同的格式。在实践中,我们可以使用下面的文件格式。所有的这些文件格式一般都用来存储特征,并在之后用作机器学习算法的输入:

txt:这种格式仅提供一个原始数据集 ,gutenberg数据集就是这种语料库的实例之一一些实际的应用包含了对平行语料库的使用。例如,如果想要开发类似 Grammarly的语法校正软件,就需要使用平行语料库。

csv:在参加编程马拉松或 Kaggle比赛时,通常会提供这种文件格式的语料。我们使用这种文件格式存储从原始文本中提取的特征,而包含特征的csv文件将用来训练NLP应用的算法。

tsv:当你需要构建一个在句子中添加逗号的NLP应用时,csv文件无法用来存储相关的特征,因为特征本身包含了逗号,这将影响我们对于特征文件的处理。这时,你可以使用任何自定义的分隔符,如\t、‖或其他符号,以便于后续的处理。

xml:一些著名的NLP分析器和工具提供xml格式的结果。如 Stanford的 CoreNLP工具提供了xml格式的句法分析结果。这种文件格式主要用于存储NLP应用的结果。

json:Stanford CoreNLP工具也提供json格式的结果。这种文件格式主要用于存储NLP应用的结果,同时,它十分便于显示,也易于同网页应用相整合。

LibSvM:特殊的文件格式。支持稀疏训练数据,这种格式的训练数据中仅包含非零值。其中的索引代表原有格式中一条实例数据的一个数值所在的列(也可理解为特征编号)。如果要从传统数据集转化为 LibSVM格式,只需要遍历原有格式数据,如果原数据集构成的稀疏矩阵中X(i,j)的数值非零,在 LibSVM格式数据中输出j+1:X(i,j)即可。

X(i,j)即原稀疏矩阵:

■如果(i,j)的数值非零,那么这个值应该被记录在 LibSVM格式文件里。

◆ LibsVM的j+1索引后对应的是原X(i,j)的值,由于矩阵的列索引是从0开始的,所以这里我们为每一个j加1。

■否则,这个值无须记录在文件中。

举例如下:

■1 5:1 7:1 14:1 19:1

◆1代表该实例的类别,或者说标签。

◆在5:1中,5是键值,1则是数值,即5:1是一对键值对。

◆其中,5是这一实例向量的列序号,也可以理解为数据的属性编号;由于这里我们只考虑稀疏矩阵中的非零值,因此5所对应的值是1。

◆这个实例变量的1,2,3,4,6列,以及其他没有提到的列对应的数值都是0,因此在对应的 LibsVM格式中这些列数不被记录在内。

Apache Spark使用这种数据类型进行训练,在第5章中介绍了将文本数据转化成 LibsVM格式的方法

免费语料库资源

获取语料是一个富有挑战性的工作,本节提供了一些可以免费获取的用于NLP应用的语料资源链接。

nltk库包含了一些内建语料库。执行下面的指令将输出所有语料库的名字:

import nltk.corpus

dir(nltk.corpus)

print(dir(nltk.corpus))

目前为止,本章已讲述了很多基础内容。下一节将告诉你如何为一个基于机器学习的自然语言处理应用进行数据集的准备。

为NLP应用准备数据集

本节将讲述为NLP或其他数据科学应用准备数据集的基本步骤。三个基本步骤如下:

挑选数据

预处理数据

转换数据

挑选数据

如果你正同世界科技巨头,如谷歌、苹果、脸书等合作,那么你可以轻易地获取大量数据,但如果你没有有力的合作伙伴,而是进行独立研究或学习,那么要如何、从哪里获取数据集?首先,根据你想要开发的NLP应用,决定所需数据集的种类.此外,你还需要彻底地理解应用和问题陈述,确定应用的最终输出。

预处理数据集

1.格式化

在本阶段,生成最便于你的工作的数据集格式。如果你的数据集是JSON格式的,但csv将更便捷,那么就将它从JSON转化为CSV格式。

2.清洗

如果数据集存在缺失值,可以考虑删除这条记录,或者使用合适的近似值来填充。如果数据集中存在不必要的数据属性,也可以将它移除。假设你正在构建一个语法校正系统,那么可以从数据集中移除数学公式,因为应用中无须使用公式。

3.采样

这一阶段中,我们实际上在尝试理清数据集中可以获得和导出的数据属性,并根据应用辨别哪些属性更重要。假如我们正构建一个聊天机器人,那么,需要将句子切分成词,然后辨别其中的关键词,因此,需要从中导出词级别的信息。对这个应用而言,词级别和句子级别的信息都很重要,所以除了垃圾数据以外,不对数据进行删除。通过采样,我们可以抽取出能够最好地表达整个数据集的数据属性。

4.转换数据

在这一阶段,我们应用一些特征工程技术,将文本数据转化成为数值数据,以便机器理解和找出其中的规律。所以本阶段实质上是数据处理阶段。在NLP领域,可以通过一些编码和向量化技术进行这样的转换。

2.8网页爬取

将使 beautifulsoup和 scrapy等库开发网络爬虫工具,并学习相应的基本代码。

代码示例:

import requests

from bs4 import BeautifulSoup

def getPagebyBeau():

page=requests.get("https://simplifydatascience.wordpress.com/about/")

soup=BeautifulSoup(page.content,"lxml")

print(soup.find_all('p')[0].get_text())

print(soup.find_all('p')[1].get_text())

print(soup.find_all('p')[2].get_text())

print(soup.find_all('p')[3].get_text())

getPagebyBeau()

output:

simplify data science

SDS

I’m data science researcher by practice and data scientist by profession. I like to deal with data science related problems. My research interest lies into Big Data Analytics , Natural Language Processing , Machine Learning and Deep Learning.

I am still learning myself, but I found that writing posts and tutorials is the best way to deepen my own understanding and knowledge. On this platform, I’m sharing my experiences and also coming up with tutorials for beginners and posting articles. I am happy to help in any way I can. So don’t hesitate to get in touch!

如果在运行脚本的过程中产生了警报,不用担心。

现在,再尝试使用 scrapy库进行网页爬取。首先,需要创建一个新的 scrapy项目.

在终端执行下面的命令建立一个 scrapy项目:

scrapy startproject project_name

我使用的 scrapy项目名称是 web_scraping_test,命令如下:

scrapy startproject web_scraping_test

之后,执行下列步骤:

1)编辑items.py文件,这个文件在创建项目时已经建立了。

2)在spiders目录下新建 WebScrapingTestspider文件。

3)前往想要爬取的网页,并选取需要的元素的 xpath。你可以在这个网址了解更多有关 xpath选取的内容 : https://doc.scrapy.org/en/1.0/topics/selectors.html

from scrapy import Spider

from scrapy.selector import Selector

class WebScrapingTestspider(Spider):

name = "WebScrapingTestspider"

allowed_domains = ["stackoverflow.com"]

start_urls = [

"http://stackoverflow.com/questions?pagesize=50&sort=newest",

]

def parse(self, response):

questions = Selector(response).xpath('//div[@class="summary"]/h3')

for question in questions:

item = dict()

item['title'] = question.xpath(

'a[@class="question-hyperlink"]/text()').extract()[0]

item['url'] = question.xpath(

'a[@class="question-hyperlink"]/@href').extract()[0]

yield item

你也可以开发一个绕过AJAX和脚本的网络爬虫,但需要非常小心,遵守道德。本书将不介绍此种方法。出于好奇,你也可以上网搜索他人是如何做到的。你可以通过 Selenium库进行自动点击来模拟网络事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值