世界语言资源平台

  • 首页
  • 标签
  • 归档

Keras

发表于 2018-04-19

提供者:刘晓
地址:https://keras.io/#installation

Keras 简介

Keras 最初是作为 ONEIROS 项目(开放式神经电子智能机器人操作系统)研究工作的一部分而开发的。Keras是一个高层神经网络API,纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:

  • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
  • 支持CNN和RNN,或二者的结合
  • 无缝CPU和GPU切换

Keras适用的Python版本是:Python 2.7-3.6

Keras官方英文文档

Keras官方中文文档

Keras GitHub

Keras 安装

在安装 Keras 之前,请安装以下后端引擎之一:TensorFlow,Theano,或者 CNTK。官方推荐 TensorFlow 后端 。

  • TensorFlow 安装指引
  • Theano 安装指引
  • CNTK 安装指引

还可以考虑安装一下可选依赖:

  • cuDNN (如果你计划在 GPU 上运行 Keras,建议安装)。
  • HDF5 和 h5py (如果你需要将 Keras 模型保存到磁盘,则需要这些)。
  • graphviz 和 pydot (被可视化工具用来绘制模型图)。

安装 Keras ,有两种方法:

  1. 使用 PyPI 安装 Keras (推荐)

    sudo pip install keras  
    pip install keras   # virtualenv 虚拟环境下
    
  1. 使用 Github 源码安装 Keras:
    使用 git 来克隆 Keras:

    git clone https://github.com/keras-team/keras.git    
    

然后,cd 到 Keras 目录并且运行安装命令:

cd keras  
sudo python setup.py install  

Keras 快速使用

Keras 的核心数据结构是 model,一种组织网络层的方式。最简单的模型是 Sequential 顺序模型,它是由多个网络层线性堆叠的栈。对于更复杂的结构,应该使用 Keras 函数式 API,它允许构建任意的神经网络图。
Sequential 顺序模型如下所示:

from keras.models import Sequential  
model = Sequential()  

可以简单地使用 .add() 来堆叠模型:

from keras.layers import Dense
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))  

在完成了模型的构建后, 可以使用 .compile() 来配置学习过程:

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])  

如果需要,你还可以进一步地配置优化器。Keras 的一个核心原则是使事情变得相当简单,同时又允许用户在需要的时候能够进行完全的控制(终极的控制是源代码的易扩展性)。

model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))    

现在,你可以批量地在训练数据上进行迭代了:

# x_train 和 y_train 是 Numpy 数组 -- 就像在 Scikit-Learn API 中一样。
model.fit(x_train, y_train, epochs=5, batch_size=32)

或者,你可以手动地将批次的数据提供给模型:

model.train_on_batch(x_batch, y_batch)    

只需一行代码就能评估模型性能:

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)    

或者对新的数据生成预测:

classes = model.predict(x_test, batch_size=128)    

构建一个问答系统,一个图像分类模型,一个神经图灵机,或者其他的任何模型,就是这么的快。

相关例子

在Keras代码包的examples文件夹中,你将找到使用真实数据的示例模型:

  • CIFAR10 小图片分类:使用CNN和实时数据提升
  • IMDB 电影评论观点分类:使用LSTM处理成序列的词语
  • Reuters(路透社)新闻主题分类:使用多层感知器(MLP)
  • MNIST手写数字识别:使用多层感知器和CNN
  • 字符级文本生成:使用LSTM
  • 基于多层感知器的softmax多分类:

相关论文

涉及使用Keras实现的算法及论文后续补上

小知识: Keras (κέρας) 在希腊语中意为 号角 。它来自古希腊和拉丁文学中的一个文学形象,首先出现于 《奥德赛》 中, 梦神 (Oneiroi, singular Oneiros) 从这两类人中分离出来:那些用虚幻的景象欺骗人类,通过象牙之门抵达地球之人,以及那些宣告未来即将到来,通过号角之门抵达之人。 它类似于文字寓意,κέρας (号角) / κραίνω (履行),以及 ἐλέφας (象牙) / ἐλεφαίρομαι (欺骗)。

Gensim

发表于 2018-04-19

提供者:李华勇

地址:https://radimrehurek.com/gensim/

简介

Gensim是一个免费的Python库,它可以用来从文档中自动提取语义主题,并且尽可能地做到轻松(对人)高效(对电脑)。

Gensim致力于处理原始的、非结构化的数字文本(普通文本)。Gensim中用到的算法,如潜在语义分析(Latent Semantic Analysis,LSA)、隐含狄利克雷分配(Latent Dirichlet Allocation,LDA)或随机预测(Random Projections)等,是通过检查单词在训练语料库的同一文档中的统计共现模式来发现文档的语义结构。这些算法都是无监督算法,也就是无需人工输入——你仅需一个普通文本的语料库即可。

特点

内存占用低——任何时候都不会将整个语料库全部读入内存中,可以处理大规模、网络规模的语料库。

有效实现了几种流行的向量空间算法,包括Tf-idf、分布式增量潜在语义分析、分布式增量隐含狄利克雷分配或随机预测;增加新的模型也十分方便(没骗你!)。

预置了几种流行的数据格式的I/O封装器和转换器。

利用文档的语义代表计算其相似性。

整个gensim包围绕语料库(Corpus)、向量(Vector)、模型(Model)三个概念展开。

快速开始

安装

1
pip install --upgrade gensim

tfidf表示

1
2
3
4
5
6
7
8
9
10
In [34]: tfidf = models.TfidfModel(corpus) # step 1 -- initialize a model
In [37]: doc_bow = [(0, 1), (1, 1)]
In [38]: print(tfidf[doc_bow])
[(0, 0.7071067811865476), (1, 0.7071067811865476)]
In [39]: corpus_tfidf = tfidf[corpus]
In [40]: pprint(corpus_tfidf)
<gensim.interfaces.TransformedCorpus object at 0x0129FFD0>
In [41]: for doc in corpus_tfidf:
...: pprint(doc)
...:

lsi表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
In [42]: lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=2) # initialize an LSI transformation
In [43]: corpus_lsi = lsi[corpus_tfidf] # create a double wrapper over the original corpus: bow->tfidf->fold-in-lsi
In [47]: lsi.print_topics(2)
Out[47]: [(0, '-0.703*"trees" + -0.538*"graph" + -0.402*"minors" + -0.187*"survey" + -0.061*"system" + -0.060*"time" + -0.060*"response" + -0.058*"user" + -0.049*"computer" + -0.035*"interface"'), (1, '-0.460*"system" + -0.373*"user" + -0.332*"eps" + -0.328*"interface" + -0.320*"time" + -0.320*"response" + -0.293*"computer" + -0.280*"human" + -0.171*"survey" + 0.161*"trees"')]
In [48]: for doc in corpus_lsi:
...: print(doc)
...:
[(0, -0.066007833960906648), (1, -0.5200703306361848)]
[(0, -0.19667592859142974), (1, -0.76095631677000308)]
[(0, -0.089926399724468281), (1, -0.72418606267525087)]
[(0, -0.075858476521785109), (1, -0.632055158600343)]
[(0, -0.10150299184980502), (1, -0.57373084830029464)]
[(0, -0.70321089393783032), (1, 0.16115180214026176)]
[(0, -0.87747876731198216), (1, 0.16758906864659895)]
[(0, -0.90986246868185694), (1, 0.14086553628719531)]
[(0, -0.61658253505692839), (1, -0.053929075663890019)]

相似度查询

1
2
In [49]: from gensim import similarities
In [50]: index = similarities.MatrixSimilarity(lsi[corpus]) # transform corpus to LSI space and index it

相关资料

  1. Khosrovian K, Pfahl D, Garousi V. GENSIM 2.0: a customizable process simulation model for software process evaluation[C]//International Conference on Software Process. Springer, Berlin, Heidelberg, 2008: 294-306.

中国哲学书电子化计划

发表于 2018-04-19

提供者:李华勇

地址:https://ctext.org

简介

本网站的目的是提供尽可能精确且便利使用的中国古代原典文献(尤其先秦两汉文献),把这些资料以 恰当结构、可搜索模式来展现,并且广泛使用现代技术作为工具使这些文献更容易学习和研究,因而使更多人有机会接触这些原典文献。

本站提供不同的版本:中文版和英文版,简体字和繁体字。您可以使用任何一页左上边的连接随时转换。

主要功能与内容

原典资料库

本网站最主要的部分为古籍资料库,此资料库包含各种从哲学、历史、语言学等角度被视为重要的文献,写作年代以先秦两汉爲主。 本网站的所有资料都存在一个专门设计的数据库,以便读浏览和搜索的方便。 此外,部分原典有附英文或现代汉语翻译,这些翻译是一段一段对照原典而附上的,因此很容易从译文找出对应的原典,或从原典找出对应的译文。

在原典段落的左手边,系统将会显示下列的部份图标;点击这些图标,可以便利享用本站的许多独特功能:

内部字典

内部汉字字典合并三个来源的信息:统一码联盟(Unicode Consortium)的“Unihan”数据库、上述的原典资料库、以及本网站新开发的CTP字典。 其中Unihan数据库提供有关汉字的基本信息,包括部首、笔画数、异体字、标准字典中的出处、以及英文翻译(但此英文翻译以现代汉语用法爲主)。 原典资料库则给每一个字提供原典中的具体出处。最后,CTP字典试图对汉字的语义和实际运用提供一个尽可能完整的分析。 虽然从汉字的数量上看大多数汉字是单义词,但少数很常用的字却有许多不同的用法,这些不同用法通常有不同语义或读法。 CTP字典把这些不同意义或不同读法的用法分开处理,并且通过原典数据库给每一个不同用法分别提供原典出处。 这一功能是透过一种“语义链接”的手段而实现的,即建立从某篇某段某句中的某字到CTP字典中的相关用法的链接。 建立这些链接需要对文本的理解,因而是一个手动的且耗时的程序;因此CTP字典的范围目前很有限(但日益增加)。 您可以参考CTP字典中对 与、说、故的解释。

词语分析表

通过内部字典和上述的语义链接,本站还可以对原典数据库中的任何段落提供词语分析表。 词语分析表为段落中的每一个字显示字典中的英文翻译及其它信息,并且对于有语意链接的词语显示词语在此脉络中的意义。 例如,在《论语》的第一段中,系统会显示“乐”的正确读法是“le”而不是“yue”,且该句中“说”的用法跟“悦”的读法、意义相同(请参考《学而》第一段词语分析表)。

建立语意链接的计划正在进行,因此目前也有缺少链接的字。当一个字尚未有语意链接时,系统将会显示此字的基本资料,并提供至完整字典项目的连接。

相似段落资料

由于种种原因,许多早期文献含有与其它文献相似的片段或较长的段落,足以证明两个著作并非完全独立而形成的。此现象有时表明原作者有意识的抄写了当时已形成的其它著作;有时表明谋一个俗语当时已流行;也有时是由其它的原因造成的。在许多情况下,虽然这些相似的片段具有明显的相似性,并足以保证此相似性并非巧合,与此同时这些片段有时候具有重要且有趣的不同之处。

本站的相似段落功能把这些相似或相同的段落连接起来,且显示相似部份以便对照。任何具有相似段落讯息的段落将会显示图标;点击此图标将会显示此段落、所有相似段落及其连接。

相似段落讯息可以使用下述的“高级搜索”功能来搜索。

原典影印本

许多早期文献具有不同的现存版本。这些版本的不同有些是因不同的文献历史背景而产生的,也有一些产生于纠正抄写错误,也有部份来自假借字现象而造成的,而另外还有更多造成原因。这些造成原因加起来使得我们很难看出今天的电子版或印刷版的原典是否“正确”;甚至使得我们很难以下定义说什么叫做“正确”的版本,毕竟未必真的曾经存在过所谓“最原始的”由一个作者所写作的版本。

因此,本站为越来越多的原典提供原典扫瞄版,且为原典每一段落提供至扫瞄版的连接。原典数据库中的每一个字应对应于扫瞄版的一个字,而系统能够给使用者显示原典及原典扫瞄版的对照本,以便使用者确定原典与扫瞄本无误。另,因为扫瞄本有可能经过后世的研究而被视为本身有误,因此系统将会注明所有被修改的字词,同时保留原本错误的字以便与扫瞄版对照。

每个具有影印本的原典段落会显示图标;点击此图标将会打开电子版与扫瞄本的对照显示,并突显对应于此段落的部份。

使用说明

全文搜索

要进行全文搜索时,先确认浏览器中打开的网页属于网站“原典全文”的部分,然后在左下角的“搜索”框内选择搜索范围并输入所要搜索的字词。(如:学而时习之)且点击“搜索”。全文资料库支持使用多数的搜索条件;在不同搜索条件之间输入半角空格分割(如:学而时 不亦君子),系统将会列出所有同时符合所有搜索条件的段落。若要搜索含有空格的英文词组,在词组外加上英文引号(如:”Mozi said”)。点击“高级搜索”可以使用更有弹性的搜索方式。

辞典搜索

要进行辞典搜索时,先确认浏览器中打开的网页属于网站“辞典”的部分,然后在左下角的“搜索”框内输入所要查询的字词。(如:学)且点击“搜索”。当输入的文字不作为辞典中的项目时,系统将会以表格的方式为被输入的每一个汉字列出辞典中的资料。

研究资料搜索

要进行研究资料搜索时,先确认浏览器中打开的网页属于网站“研究资料”的部分,然后在左下角的“搜索”框内输入所要查询的字词。(如:Ethics)且点击“搜索”。点击“高级搜索”可以使用更有弹性的搜索方式。

一般性图标

相关资料

  1. 吴智雄. 由 “数位人文研究法” 探《 皇明经世文编》 所载明初的海洋朝贡议论[J]. 南海学刊, 2016, 2(1): 18-27.
  2. Sturgeon D. 中國哲學書電子化計劃[J]. 網址: http://ctext. org, 2011.

CN-DBpedia

发表于 2018-04-19

提供者:李华勇

地址:http://kw.fudan.edu.cn/cndbpedia/intro/

简介

CN-DBpedia是由复旦大学知识工场实验室研发并维护的大规模通用领域结构化百科,其前身是复旦GDM中文知识图谱,是国内最早推出的也是目前最大规模的开放百科中文知识图谱,涵盖数千万实体和数亿级的关系,相关知识服务API累计调用量已达6亿次。

CN-DBpedia以通用百科知识沉淀为主线,以垂直纵深领域图谱积累为支线,致力于为机器语义理解提供了丰富的背景知识,为实现机器语言认知提供必要支撑。

CN-DBpedia已经从百科领域延伸至法律、工商、金融、文娱、科技、军事、教育、医疗等十多个垂直领域,为各类行业智能化应用提供支撑性知识服务,目前已有近百家单位在使用。

CN-DBpedia具有体量巨大、质量精良、实时更新、丰富的API服务等特色。CN-DBpedia已经成为业界开放中文知识图谱的首选。基于CN-DBpedia的知识图谱构建与应用能力已经输出并应用在华为、小I机器人、中国电信、中国移动、同花顺等业界领军企业的产品与解决方案中。

CN-DBpedia提供全套API,并且免费开放使用。

使用说明

浏览器检索

直接在网页上search即可。
比如输入 北京语言大学 的结果如下:

API接口

api/cndbpedia/ment2ent:

输入实体指称项名称(mention name),返回对应实体(entity)的列表,json格式。

请求参数
q:实体指称项名称(mention name);必填项

apikey:开发者的访问密钥;可选项(注:不加访问密钥会存在访问限制)

返回字段
status:本次API访问状态,如果成功返回“ok”,如果失败返回“fail”

ret: 返回entity name list

URL
http://shuyantech.com/api/cndbpedia/ment2ent?q=**

http://shuyantech.com/api/cndbpedia/ment2ent?q=**&apikey=**

Example
http://shuyantech.com/api/cndbpedia/ment2ent?q=红楼梦

api/cndbpedia/avpair:

输入实体名,返回实体全部的三元组知识

请求参数
q:实体名称(entity name);必填项

apikey:开发者的访问密钥;可选项(注:不加访问密钥会存在访问限制)

返回字段
status:本次API访问状态,如果成功返回“ok”,如果失败返回“fail”

ret: 返回attribute-value pair list, 每个pair也是一个list ([attribute, value])

URL
http://shuyantech.com/api/cndbpedia/avpair?q=**

http://shuyantech.com/api/cndbpedia/avpair?q=**&apikey=**

Example
http://shuyantech.com/api/cndbpedia/avpair?q=复旦大学

相关资料

  1. Bo Xu, Yong Xu, Jiaqing Liang, Chenhao Xie, Bin Liang, Wanyun Cui, and Yanghua Xiao. CN-DBpedia: A Never-Ending Chinese Knowledge Extraction System. In International Conference on Industrial, Engineering and Other Applications of Applied Intelligent Systems, pp. 428-438. Springer, Cham, 2017.

OpenNMT

发表于 2018-04-19

提供者:李华勇

地址:http://zh.opennmt.net/

简介

海量的数据背景下,人工翻译已经无法承载所有的翻译任务,机器翻译效果并不十分理想,但在有些情况下可以减少理解外语文本所需要的时间和精力。我本人出身英语专业,但是仍然感觉阅读英文文本所花费的时间和精力是中文文本的2-3倍,比如中文一分钟能够阅读600-1000字甚至更多,但英语文章书籍,一般也就200-300单词而已,而且时间长了,大脑更疲劳,难以有效获取信息。所以借助机器翻译,先大致浏览所需理解的外语文本,不失为一种节约时间精力的方式。随着机器翻译的效果越来越好,它的应用场景也越来越广泛,甚至可能彻底改变人类相互沟通的方式。

目前机器翻译已经基本都从传统的统计翻译,变成了神经网络机器翻译,效果有较大的提升,特别是西方语种之间,比如英德互译。而中英互译仍然有差距,不过我想达到令人满意的效果只是时间问题,Google 和 百度 的机器翻译,在某些类型的文档翻译上,已经几乎超过人类,比如科技类的论文,Google 的机器翻译效果尤其好。如果让一个译者去翻译一篇科技类的论文,成本非常高,有很多专业词汇,还有数学符号,懂的人并不多,翻译起来也费时费力,但机器翻译却对这类文本有着很高的效率,十分令人欣喜。

OpenNMT 是一个由 Harvard NLP (哈佛大学自然语言处理研究组) 开源的 Torch 神经网络机器翻译系统。

特点

  1. 简单的通用接口,只需要源/目标文件。

  2. 快速高性能GPU训练和内存优化。

  3. 提高翻译性能的最新的研究成果。

  4. 可配对多种语言的预训练模型(即将推出)。

  5. 允许其他序列生成任务的拓展,如汇总和图文生成

快速开始

OpenNMT 包含三个命令

1) 数据预处理

th preprocess.lua -train_src data/src-train.txt -train_tgt data/tgt-train.txt -valid_src data/src-val.txt -valid_tgt data/tgt-val.txt -save_data data/demo

2) 模型训练

th train.lua -data data/demo-train.t7 -save_model model

3) 语句翻译

th translate.lua -model model_final.t7 -src data/src-test.txt -output pred.txt

相关资料

  1. Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.
  2. Wu Y, Schuster M, Chen Z, et al. Google’s neural machine translation system: Bridging the gap between human and machine translation[J]. arXiv preprint arXiv:1609.08144, 2016.

GENIA Tagger

发表于 2018-04-19

提供者:刘晓
地址:http://www.nactem.ac.uk/tsujii/GENIA/tagger/

简介

GENIA Tagger对生物医学文本进行标记、浅解析和命名实体识别。
GENIA标记器分析英语句子并输出基本形式,词性标记,块标记和命名实体标记。标记器专门针对生物医学文本(如MEDLINE摘要)进行了调整。如果需要从生物医学文档中提取信息,该标记器可能是一个有用的预处理工具。可以尝试演示页面上的标记器。

使用教程

安装:

  • 下载地址:http://www.nactem.ac.uk/tsujii/GENIA/tagger/geniatagger-3.0.2.tar.gz
  • 解压文档:tar xvzf geniatagger.tar.gz
  • Make:

    cd geniatagger  
    make
    
  • 标记句子:准备一个每行包含一个句子的文本文件,然后

./geniatagger < RAWTEXT > TAGGEDTEXT
word base POStag chunktag NEtag
word1 base1 POStag1 chunktag1 NEtag1
word2 base2 POStag2 chunktag2 NEtag2
: : : : :

标记器以以上制表符分隔的格式输出基本形式,词性(POS)标记,块标记和命名实体(NE)标记。
块以IOB2格式表示(B表示BEGIN,I表示内部,O表示外部)。

示例:

echo "Inhibition of NF-kappaB activation reversed the anti-apoptotic effect of isochamaejasmin." | ./geniatagger
word base POStag chunktag NEtag
Inhibition Inhibition NN B-NP O
of of IN B-PP O
NF-kappaB NF-kappaB NN B-NP B-protein
activation activation NN I-NP O
reversed reverse VBD B-VP O
the the DT B-NP O
anti-apoptotic anti-apoptotic JJ I-NP O
effect effect NN I-NP O
of of IN B-PP O
isochamaejasmin isochamaejasmin NN B-NP O
. . . O O

通过查看块标签,您可以从该输出中轻松提取四个名词短语(“抑制”,“NF-kappaB激活”,“抗凋亡效应”和“isochamaejasmin”)。您还可以使用指定的实体标签查找蛋白质名称。

相关论文

[1] S. Kulick, A. Bies, M. Liberman, M. Mandel, R. McDonald, M. Palmer, A. Schein and L. Ungar. Integrated Annotation for Biomedical Information Extraction, HLT/NAACL 2004 Workshop: Biolink 2004, pp. 61-68.
[2] Yoshimasa Tsuruoka, Yuka Tateishi, Jin-Dong Kim, Tomoko Ohta, John McNaught, Sophia Ananiadou, and Jun’ichi Tsujii, Developing a Robust Part-of-Speech Tagger for Biomedical Text, Advances in Informatics - 10th Panhellenic Conference on Informatics, LNCS 3746, pp. 382-392, 2005 (pdf)
[3] Yoshimasa Tsuruoka and Jun’ichi Tsujii, Bidirectional Inference with the Easiest-First Strategy for Tagging Sequence Data, Proceedings of HLT/EMNLP 2005, pp. 467-474. (pdf)

上文来源:http://www.nactem.ac.uk/GENIA/tagger/

GENIA Tagger Demo:http://text0.mib.man.ac.uk/software/geniatagger/

Robobrowser

发表于 2018-03-11

提供者:郭铭昊

Robobrowser——一个轻量级爬虫库

常用于爬虫和简单的web测试,纯python编写,用起来很方便,语法自然,且易学。另外,robobrowser建立在requests和BeautifulSoup之上,容易被人们接受。官方介绍Robobrowser是:Your friendly neighborhood web scraper。

实现原理


要点

  • RoboState类里,页面上内容的抓取和处理实际上委托给了BeautifulSoup。RoboState类的_parsed对象实际上就是BeautifulSoup的实例;

  • RoboState类中保存了每个请求的响应内容——response.content;

  • RoboBrowser类里,发送请求的方法实际上委托给了requests类——session;

  • RoboBrowser类里比较复杂就是保存每次访问的状态,以及实现back和forward功能。其主要思想是把所有的访问历史都放在内存里,然后通过游标去访问;

  • 每次页面发生变化,也就是open和submit_form之后都会调用_update_state方法去更新当前状态;

  • 点击这里 了解详情.

流程梳理

  • RoboBrowser()实例化的时候,会new 1个requests的session用于发送http请求,同时初始化游标为-1并且当前的status列表初始化为空;

  • RoboBrowser.open(url)方法调用时,session对象会访问具体的url,然后更新游标和status列表。基本思想是往status列表里append 1个新new出来的RoboState对象;

  • RoboBrowser.find()方法调用时,使用当前游标处的state对象的_parsed对象的find方法去抓取页面内容,实际上就是BeautifulSoup的find方法;

安装Robobrowser


  • 使用pip安装:
          
    pip install robobrowser -i http://pypi.douban.com/simple/
    

小例子


  • 新建1个start.py文本文件,代码如下

          
          import re
          from robobrowser import RoboBrowser
    
          b = RoboBrowser(history=True)
          b.open('http://itest.info/courses/2')
    
          title = b.select('.headline h2')
          print title[0].text
    
          infos = b.select('h4')
    
          for info in infos:
              print info.text
    

文档查询


  • robobrowser自带文档shu说明,命令行运行:
            
          python -m pydoc -p 1234
    

简单的爬虫


代码讲解

        
        import re
        from robobrowser import RoboBrowser

        url = 'http://itest.info/courses/2'
        b = RoboBrowser(history=True)
        b.open(url)

        class_name = b.select('.headline h2')
        print class_name[0].text

        class_desc = b.select('.tag-box')
        print class_desc[0].text 

        class_time = b.select('h4')
        print class_time[0].text

        teacher = b.select('.thumbnail-style h3')
        print teacher[0].text

        qq = b.find(text=re.compile('QQ'))
        print qq

        qq_group = b.find(text=re.compile('\+selenium'))
        print qq_group
  • b = RoboBrowser(history=True) b.open(url) 用来创建browser和打开url;
  • b.select() 方法可以接受css选择器,返回页面上所有符合条件的元素的集合,也就是说返回的是list,可以进行迭代;
  • b.find(),只返回1个精确的结果;
  • 注意,find和select方法返回的均是Beautiful Soup的tag对象或对象集合;

抓取制定内容


背景

robobrowser支持Beautiful Soup,一般来说通过下面3个方法获取页面上感兴趣的内容

- find
- find_all
- select

find方法

find方法是返回页面上符合条件的第1个元素。


import re
from robobrowser import RoboBrowser
url = ‘http://itest.info/courses/2'
b = RoboBrowser(history=True)
b.open(url)

title = b.find('title')  
print title.text

img = b.find(id='logo-header')
print img['src']

print b.find(href='/courses/4').text

print b.find(class_='active', text=re.compile('python')).text

find_all方法

find_all方法的用法跟find基本相同,但是find_all会返回所有符合条件的tag的集合(ResultSet)。


import re
from robobrowser import RoboBrowser

url = 'http://itest.info/courses/2'
b = RoboBrowser(history=True)
b.open(url)

all_links = b.find_all('a')  
for link in all_links:
print link.text

divs = b.find_all(class_='container')
print divs

first_two_p = b.find_all('p', limit=2)
print first_two_p

print b.find_all(['meta', 'img'])

select方法

select方法支持css选择器,返回的是list。


import re
from robobrowser import RoboBrowser

url = 'http://itest.info/courses/2'
b = RoboBrowser(history=True)
b.open(url)

all_links = b.select('a')  
for link in all_links:
print link.text

divs = b.select('.container')
print len(divs)

其他技巧

  • 找到页面上所有具有id属性的元素 b.find_all(id=True)
  • 不递归查找元素。也就是说只在的直接子后代中查找 b.find(‘p’, recursive=False)

follow_link


方法介绍

robobrowser的 follow_link 方法可以点击链接并自动完成跳转。


import re
from robobrowser import RoboBrowser
url = ‘http://www.qq.com/'
b = RoboBrowser(history=True)
b.open(url)

today_top = b.find(id='todaytop').a  
print today_top['href']
b.follow_link(today_top)

title = b.select('.hd h1')[0]
print '*************************************'
print title.text
print '*************************************'

print b.find(id='articleContent').text

  • follow_link的用法,一般来说都是用find/select/find_all方法过滤出相应的链接,然后调用b.follow_link(link)的方式去点击该链接。

表单操作


方法介绍

        
        import re
        from robobrowser import RoboBrowser

        url = 'http://testerhome.com/account/sign_in/'
        b = RoboBrowser(history=True)
        b.open(url)

        login_form = b.get_form(action='/account/sign_in')
        print login_form

        login_form['user[login]'].value = 'your account'
        login_form['user[password]'].value = 'your password'

        b.submit_form(login_form)
        print b.select('.alert.alert-success')[0].text
  • get_form 方法用来抓取form;
  • submit_form 方法用来提交表单;
  • form[name].value= 方法用来给文本框赋值,也就是说往文本框里写内容;

Beauiful Soup的过滤器


字符串

最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容,下面的例子用于查找文档中所有的b标签:


soup.find_all(‘b’)

正则表达式

如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容.下面例子中找出所有以b开头的标签,这表示 body 和 b 标签都应该被找到:


import re
for tag in soup.find_all(re.compile(“^b”)):
print(tag.name)

下面代码找出所有名字中包含”t”的标签:


for tag in soup.find_all(re.compile(“t”)):
print(tag.name)

列表

如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有 a 标签和 b 标签:


soup.find_all([“a”, “b”])

True

True 可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点


for tag in soup.find_all(True):
print(tag.name)

方法

如果没有合适过滤器,那么还可以定义一个方法,方法只接受一个元素参数 ,如果这个方法返回 True 表示当前元素匹配并且被找到,如果不是则反回 False

下面方法校验了当前元素,如果包含 class 属性却不包含 id 属性,那么将返回 True:


def has_class_but_no_id(tag):
return tag.has_attr(‘class’) and not tag.has_attr(‘id’)

将这个方法作为参数传入 find_all() 方法,将得到所有标签:


soup.find_all(has_class_but_no_id)

常用于爬虫和简单的web测试,纯python编写,用起来很方便。

jieba

发表于 2018-03-11

提供者:于嘉威
“结巴”中文分词:做最好的 Python 中文分词组件:

“Jieba” (Chinese for “to stutter”) Chinese text segmentation: built to be the best Python Chinese word segmentation module.

什么是jieba库?

Aaron Swartz

jieba 是一个python实现的分词库,对中文有着很强大的分词能力。
听到这个解释可能不足以让你了解,到底什么是jieba。所以我们首先要了解下面这些概念:

1)、什么是中文分词?

即:中文文本,从形式上看是由汉字、标点符号等组成的一个字符串。由字组成词,再组成句子、文章等。那么分词,就是按照一定的规则把字符串重新组合成词序列的过程。

2)、为什么要分词?

(a)在中文里面,词是最小的能够独立活动的有意义的语言成分

(b)英文中单词以空格作为自然分界,虽然也有短语划分的问题。但中文词没有一个形式上的分界,相对而言难度大了许多

(c)分词作为中文自然语言处理的基础工作,质量的好坏对后面的工作影响很大

因此有了这些概念我们便知jieba就是专门为实现中文分词的强大工具!

这里是jieba的详细文档:https://pypi.python.org/pypi/jieba/

jieba的github主页位于:https://github.com/fxsjy/jieba

jieba特点

  • 支持三种分词模式:
  • 精确模式,试图将句子最精确地切开,适合文本分析;
  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  • 支持繁体分词
  • 支持自定义词典
  • MIT 授权协议

安装及使用说明

代码对 Python 2/3 均兼容

  • 全自动安装:easy_install jieba 或者pip install jieba / pip3 install jieba
  • 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
  • 手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
  • 通过 import jieba 来引用

算法

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

主要功能

jieba的功能十分丰富,限于篇幅原因,这里只介绍两个。

1、分词


  • jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
  • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  • 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
  • jieba.cut以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
  • jieba.lcut 以及jieba.lcut_for_search 直接返回 list
  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# encoding=utf-8
import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式

seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
Default Mode: 我/ 来到/ 北京/ 清华大学
他, 来到, 了, 网易, 杭研, 大厦
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

2、添加自定义词典


载入词典

  • 开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率
  • 用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
  • 词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
  • 词频省略时使用自动计算的能保证分出该词的词频。
1
2
3
4
创新办 3 i
云计算 5
凱特琳 nz
台中
  • 更改分词器(默认为jieba.dt)的 tmp_dir 和 cache_file 属性,可分别指定缓存文件所在的文件夹及其文件名,用于受限的文件系统。

范例:

  • 自定义词典:https://github.com/fxsjy/jieba/blob/master/test/userdict.txt
  • 用法示例:https://github.com/fxsjy/jieba/blob/master/test/test_userdict.py
1
之前: 李小福 / 是 / 创新 / 办 / 主任 / 也 / 是 / 云 / 计算 / 方面 / 的 / 专家 /
1
加载自定义词库后: 李小福 / 是 / 创新办 / 主任 / 也 / 是 / 云计算 / 方面 / 的 / 专家 /

调整词典

  • 使用 add_word(word, freq=None, tag=None)和 del_word(word) 可在程序中动态修改词典。
  • 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
  • 注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中将/出错/。
>>> jieba.suggest_freq(('中', '将'), True)
494
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中/将/出错/。
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台/中/」/正确/应该/不会/被/切开
>>> jieba.suggest_freq('台中', True)
69
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台中/」/正确/应该/不会/被/切开
  • “通过用户自定义词典来增强歧义纠错能力” — https://github.com/fxsjy/jieba/issues/14

MLC语料库

发表于 2018-03-11

提供者:孟杨慧

点击访问:MLC语料库

一.语料库简介


  1. 中国传媒大学有声媒体文本语料库(Media Language Corpus)是一个开放、免费使用的语料库。
  2. 语料库包括2008至2013六年的34,039个广播、电视节目的转写文本,总字符数为241,316,530个,总汉字数为200,071,896个。
  3. 语料库所有语料都进行了元数据标注,检索方便

各年度语料规模如下表:

二.使用教程


1.关键字检索

-关键字检索可以在检索页面选定相应的属性项,进行特定时间段(如2008年度、2010至2013年度)、特定媒体(广播、电视)、特定单位(如中央电视台、北京电视台、中央人民广播电台)、特定语言形式(独白、对话)、特定语体(独白形式可分为播报、谈话、解说、朗读;对话形式可分为二人谈、三人谈、多人谈)、特定领域(如新闻、经济、军事)、特定栏目(如《新闻联播》《鲁豫有约》《新闻与报纸摘要》)、特定主持人(如白岩松、陈鲁豫、崔永元)等进行关键字检索。

-各属性之间有级联关系,既可以进行单独属性锁定查询,也可以进行属性间组合查询。如果“媒体”项选定了“广播”,不选择其他,就意味着下面的检索将在所有的广播语料中进行;如果“媒体”项选定了“广播”,那么在栏目项中只能选择广播的节目,不会再出现“新闻联播”这样的电视中的节目名称。如果所有的属性都没有选择,那就意味着将在全部2亿字次的语料中进行检索查询。

2.特定语言格式查询

语料库提供了多种查询方式,并且可以进行词性标注,如果查询各种重叠形式,如ABB、AABB、ABAB、A一A、A了A等,可以选择检索页面左边导航中的“检索重叠形式”进行查询。
如果需要进行成对词语,如“因为……所以、虽然……但是”等的组合查询,可以选择检索页面左边导航中的“成对字符串检索”

===========================================================================================================

=================================================================================================================

=================================================================================================================

3.正则表达式检索

常用正则表达式符号的说明如下

========================================================================================================================
分词标注说明如下:

4.二次查询

可以在第一次检索的结果中再设关键字,以得到需要的更精确的检索结果。

5.排序、保存功能

-为帮助研究者更方便地使用本语料库做统计分析,发现语言使用规律,语料库在检索结果页面设计了排序功能,可以根据需要对检索结果进行以关键字为中心的“左排序”或“右排序”。

-为帮助研究者更方便地使用本语料库写作论文选择例句,语料库专门设计了检索结果保存功能,可以把检索结果全部下载保存在本地机的一个文本中,系统没有对下载的数量进行限制。保存前还设计了两个可选择的项目:是否保存出处、是否需要加序号。如果选中“保存出处”,保存结果如下例所示,其中关键字串用“【】”标出。

三. 语料库的局限性


1.查询结果中可能会有一些伪词串,如查询“A了A”,可能会出现“八连组建了建筑工程队”“北京西站加开了开往石家庄”“并集中了中亚地区”等,这些只能由自己甄别。

2.由于语料库较大,如果不设置缩小检索范围,检索时间较长。

爱汉语语料库

发表于 2018-03-11

提供者:赵小静

  • 地址
  • 简介
  • 使用说明
  • 使用实例

地址

http://www.aihanyu.org/cncorpus/index.aspx

简介

引自爱汉语语料库:

该语料库包含“语料库检索”、“语料分析处理”、“研究资源”三部分,分别用于现代汉语、古代汉语字词索引;分词及词性标注;汉语拼音标注;字词频率统计等功能。

其中,现代汉语语料库语料库样本数:9487个(样本数即篇章数);语料库字符数:19455328个(含汉字、字母、数字、标点等);语料库总词语数:12842116个(含单字词、多字词、字母词、外文祠、数字串、标点符号等);语料库总词语个数:162875(指语料库出现的分词单位的个数)

语料库总汉字词语个数:151300(含汉字的词语个数,不包括外文词、标点、数字串等);语料库说明:现代汉语语料库是一个大规模的平衡语料库,语料选材类别广泛,时间跨度大。在线提供检索的语料经过分词和词性标注,可以进行按词检索和分词类的检索。

古代汉语语料库语料库字数: 约一亿字;语料库说明:古代汉语语料库包含自周至清各朝代的约1亿字语料,含四库全书中的大部分古籍资料。 部分书目如下:诗经、尚书、周易、老子、论语、孟子、左传、楚辞、礼记、大学、中庸、吕氏春秋、尔雅、淮南子、史记、战国策、三国志、世说新语、文心雕龙、全唐诗、朱子语类、封神演义、三国演义、水浒传、西游记、红楼梦、儒林外史等。;语料库检索:语料库未经标注,支持全文检索、模糊检索,支持语料出处、关键词居中(KWIC)排列显示。

语料分词和词性标注: 在线使用的语料分词和词性标注工具。
语料汉语拼音自动标注: 在线使用的语料汉语拼音自动标注工具。
语料字词频率统计: 在线使用的语料字词频率统计工具。
语料分析处理软件的单机版可在研究资源页面下载。

使用说明

现代汉语、古代汉语语料库

现代汉语语料库

查询模式

整词匹配:使用整词索引进行查询,可带词类,多关键词时忽略顺序,速度快,多关键词查询时任一关键词未被索引则不能返回结果。

模糊匹配:模糊匹配最易查全,可带词类,多关键词时考虑前后顺序,速度较慢。支持查询词类串。

全文检索:使用全文检索方式进行查询,不可带词类,多关键词时忽略前后顺序,速度快,但不能检索“的、了”等极高频词。

查询条件格式

查询条件由一个或多个关键词组成:单一关键词,如: 语言、语言;字或词,如:文、语言;词+词类,如: 语言/n、制定/v;词类标识符为[ / ],如:语言/n,多关键词,如: 语言 文字,语言/n 文字/n,连续词类串,如: /v /u /m /v。

词性标记代码:

n 普通名词 nt 时间名词 nd 方位名词
nl 处所名词 nh 人名 nhf 姓
— — — — — —
nhs 名 ns 地名 nn 族名
— — — — — —
ni 机构名 nz 其他专名 v 动词
— — — — — —
vd 趋向动词 vl 联系动词 vu 能愿动词
— — — — — —
a 形容词 f 区别词 m 数词
— — — — — —
q 量词 d 副词 r 代词
— — — — — —
p 介词 c 连词 u 助词
— — — — — —
e 叹词 o 拟声词 i 习用语
— — — — — —
j 缩略语 h 前接成分 k 后接成分
— — — — — —
g 语素字 x 非语素字 w 标点符号
— — — — — —
ws 非汉字字符串 wu 其他未知的符号
— — — — — —

多关键词逻辑
只对[整词匹配]的查询方式有效的标记:空格或 [+] 表示 [与(and)] 关系,如: 语言 文字 或 语言 +文字;[@] 表示 [或(or)] 关系,如: 语言 @文字 ;[-] 表示 [非(not)] 关系,如: 语言 -文字。示例:条件“语言 @文字 研究 -教学”表示检索“包含关键词’语言’或’文字’并且含关键词’研究’但不含关键词’教学’”的例句。

古代汉语语料库

查询模式、查询条件格式与现代汉语语料库相同,此外可以分朝代进行检索。

分词及词性标注&汉语拼音&字词频率统计

输入文本后可自动进行分词、词性标注、汉语拼音标注及字词频率统计。

使用实例

现代汉语、古代汉语语料库

如,在现代汉语语料库检索栏中输入“调查/v 得”,得到87条符合条件的生语料及87条符合条件的标注语料。全部语料可下载。
如,在古代汉语语料库中,将朝代设定为“宋”,输入“何+之”进行检索,得到14264条语料。

分词及词性标注&汉语拼音&字词频率统计。

分别在检索框中输入“现代汉语”,得到以下结果:

分词及词性标注结果:现代/nt 汉语/n

汉语拼音标注结果:现代/xiàndài 汉语/hànyǔ

字频统计结果:得到现代汉语四字的频次及频次。如图:
image.pngimage.png

1…181920…22

CNLR

语料库、数据集及工具资源和教程

218 日志
3 标签
© 2018 CNLR
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4