-
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/
- Ubtuntu Wiki上的 Python正则表达式操作指南
应该掌握的知识点
- 基本regex语法
- 用match匹配模式
- 使用group和提取匹配数据
Regex工具
- regexper 可视化: 例 [a-z]*(\d{4}(\D+))
- pythex 在线测试正则表达式 http://pythex.org/
进阶阅读
- 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
综合分词工具和正则表达式提取邮件签名档
(待续)
特邀讲者:丁海星,介绍正则表达式的高级玩法
#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