-
Notifications
You must be signed in to change notification settings - Fork 499
第一期w1:知识提取
知识提取是要解决结构化数据生成的问题。但是广义上讲,知识提取是数据质量提升中的一环,各种提升数据质量的方法,都可以视为某种知识提取。学术上一般是用自然语言处理的方法,但在实践中通常是利用规则。
我们要熟悉的概念和工具有 (假设大家已经熟悉了Python)
正则表达式(Regular Expression, regex)是字符串处理的基本功。数据爬取、数据清洗、实体提取、关系提取,都离不开regex。
教程:
- Python Module of the Week上的讲Python的re包 https://pymotw.com/2/re/
- Ubuntu Wiki上的 Python正则表达式操作指南
应该掌握的知识点
- 基本regex语法
- 用match匹配模式
- 使用group和提取匹配数据
Regex工具
- regexper 可视化: 例 [a-z]*(\d{4}(\D+))
- pythex 在线测试正则表达式 http://pythex.org/
- regex101 另一个很漂亮的在线正则表达式测试器 https://regex101.com/
进阶阅读
- re2 一个更快的Cython实现 https://pypi.python.org/pypi/re2/
- pyahocorasick 用字典树和Aho-Corasick自动机实现的超快的正则引擎 https://pypi.python.org/pypi/pyahocorasick/
- PythonVerbalExpressions 类自然语言构造正则表达式 https://github.com/VerbalExpressions/PythonVerbalExpressions
- Exrex 从正则表达式生成随机字符串 https://github.com/asciimoo/exrex
- PyParsing 构造正则语法(和更多规则)和提取的引擎 http://pyparsing.wikispaces.com/
- Parsley 更人性化的正则表达语法 http://parsley.readthedocs.io/en/latest/tutorial.html
分词也是后续处理的基础。分词做得好,核心秘密在词库,算法的影响反而不太大。分词是会出错的。不过有些场合(比如检索排序),只要错误是一贯的,影响也不是太大。分词后面可以用规则来弥补。工程上很丑陋,上不了台面,但对早期的小项目可能够用了。
词性(Part of Speech, POS)就是中学大家学过的动词、名词、形容词等等的词的分类。一般的分词工具都会有词性标注的选项。
教程:
- 中文分词的原理与实践(royguo) http://sobuhu.com/ml/2012/12/23/chinese-word-spliter.html
- jieba 中文分词包,按说明试一遍 https://github.com/fxsjy/jieba
- PyNLPIR 提供 NLPIR/ICTCLAS汉语分词的Python接口,看这个教程 http://pynlpir.readthedocs.io/en/latest/tutorial.html
- 中文词性标记集 https://github.com/memect/kg-beijing/wiki/中文词性标记集
应该掌握的知识点
- 用jieba分词和提取词性
- 使用自定义词典
- 熟悉中文词性标记是什么(如n nr v)
扩展阅读:
- 漫话中文自动分词和语义识别 http://www.matrix67.com/blog/archives/4212 http://www.matrix67.com/blog/archives/4870
- genius 采用 CRF条件随机场算法 https://github.com/duanhongyi/genius
- yaha "哑哈"中文分词 https://github.com/jannson/yaha
- Pattern 用词性标签扩展的正则表达式,很神奇的 http://www.clips.ua.ac.be/pattern
- NLTK提供了Stanford POS tagger的接口 http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford
- 梁斌的pullword 在线分词API http://www.pullword.com/
用nltk调用Stanford NLP包
- 下载Stanford NLP包:
http://stanfordnlp.github.io/CoreNLP/index.html#download (CORE, 基本上包含所有的tool,里面有MODELS下载地址)
http://nlp.stanford.edu/software/tagger.html (POS tagger)
http://nlp.stanford.edu/software/CRF-NER.html (NER)
- 下载Stanford NLP pre-trained models:
Stanford 中文NER Model: http://nlp.stanford.edu/software/stanford-chinese-corenlp-2015-12-08-models.jar
Other NER Models: http://nlp.stanford.edu/software/CRF-NER.html
POS Models: http://nlp.stanford.edu/software/stanford-postagger-full-2015-12-09.zip (包含中文)
- 代码示例:
import os
from from nltk.tag import StanfordNERTagger
def main():
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
print st.tag('George Washington is the president of the United States.'.split())
if __name__ == "__main__":
os.environ["CLASSPATH"] = "~/Library/stanford-ner-2015-12-09"
os.environ["STANFORD_MODELS"] = "~/Library/stanford-ner-2015-12-09/models"
main()
可以更改tagger和models 比如NER,中文models
记得设置CLASSPATH和STANFORD_MODELS
- Other Tutorials and references:
RPI季恒教授关于name tagger: http://nlp.cs.rpi.edu/course/spring14/lecture6.pdf
NLTK-Stanford taggers: http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford
Stanford NER PPT: http://nlp.stanford.edu/software/jenny-ner-2007.ppt
综合分词工具和正则表达式提取邮件签名档
下面有几个来自真实邮件的签名档,请尽可能提取下面的关键字段
- 姓名
- 单位
- 电话号码
- 电子邮件
如何提交作业:fork kg-beijing 仓库,在class1/week1/homework目录下建一个自己id的子目录,把自己的代码、运行结果放在里面,提交pull request
刘三 Liu, San
+86 15912348765
[email protected]
--------------------------
李四
北清大数据产业联合会
电话:010-34355675
邮箱:[email protected]
地址:北京市海淀区北清大学东楼201室
--------------------------
John Smith
Data and Web Science Group
University of Mannheim, Germany
http://dws.informatik.uni-mannheim.de/~johnsmith
Tel: +49 621 123 4567
--------------------------
王五
CSDN-全球最大中文IT技术社区(www.csdn.net)
电话:010-51661202-257
手机:13934567890
E-mail:[email protected]
QQ、微信:34534563
地址:北京市朝阳区广顺北大街33号院一号楼福码大厦B座12层
--------------------------
张三
北京市张三律师事务所|Beijing Zhangsan Law Firm
北京市海淀区中关村有条街1号,邮编:100080
No. 1 Youtiao Street , ZhongGuanCun West, Haidian District, Beijing 100080
Mobile: 15023345465|Email: [email protected]
(一个更大的不公开的测试集将通过邮件分享给大家)
#KG小组北京一期成员github账号:
姓名 账号
- 胡杨 superhy
- 徐卓夫 ipush
- 侯月源 moonscar
- 田昌海 Jamestch
- 高晓燕 elisagao
- 侯立莎 yimiwawa
- 耿新鹏 xpgeng
- 梁方舟 pklfz
- 郑胤 Lan09 (TBD)
- 王鸿霄 wang101
- 李靖 L0113408
- 方东昊 Spirit-Dongdong
- 丁海星 godlikedog
- 付 鹏 pengfoo
- 张梦迪 mandyzore
- 佟海奇 tongtongqi
- 郭兴雨 buptguo
- 张志瑛 minenki
- 曹志远 smartczy
- 周祥 ucaszx
- 杨凯文 gentlekevin
- 王震 newle
- 鲍捷 baojie