我意识到这是一个广泛的主题,但我正在寻找一个很好的入门,从文本解析意义,理想情况下在Python中.作为我要做的事情的一个例子,如果用户创建一个博客帖子,如:
"曼尼·拉米雷斯今天回击道奇队对阵休斯顿太空人队",
什么是轻量/轻松的方式从名词中取出名词?首先,我认为我将其限制为专有名词,但我不想仅限于此(我不想依赖于一个简单的正则表达式,假设任何标题上限是一个专有名词).
为了使这个问题更糟糕,我不会问我应该做什么?我需要一个现有单词的语料库来开始吗?为了使这项工作,我需要知道什么词法分析?我确实遇到过关于这个主题的另一个问题,现在我正在挖掘这些资源.
你需要看看自然语言工具包,它就是这种东西.
本手册的这一部分看起来非常相关:分类和标记词 - 这是一个摘录:
>>> text = nltk.word_tokenize("And now for something completely different") >>> nltk.pos_tag(text) [('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('different', 'JJ')]
在这里,我们看到,和是CC,协调配合; 现在和完全是RB或副词; 因为是IN,一个介词; 什么是NN,一个名词; 和不同的是JJ,一个形容词.
使用NLTK,特别是关于信息提取的第7章.
你说你想提取意义,并且有语义分析的模块,但我认为IE就是你所需要的 - 老实说,NLP计算机现在可以处理的唯一领域之一.
请参阅7.5和7.6关于命名实体识别的子主题(将Manny Ramerez作为一个人进行分类和分类,Dodgers作为体育组织,将Houston Astros作为另一个体育组织,或任何适合您的域名)和关系提取.一旦安装了NLTK,就可以插入一个NER chunker.从他们的例子中,提取一个地缘政治实体(GPE)和一个人:
>>> sent = nltk.corpus.treebank.tagged_sents()[22] >>> print nltk.ne_chunk(sent) (S The/DT (GPE U.S./NNP) is/VBZ one/CD ... according/VBG to/TO (PERSON Brooke/NNP T./NNP Mossman/NNP) ...)
请注意,您仍然需要知道标记化和标记,如前面章节中所讨论的,以使这些IE任务的文本格式正确.
自然语言处理(NLP)是解析的名称,也就是自然语言.存在许多算法和启发式算法,它是一个活跃的研究领域.无论您将编码什么算法,都需要在语料库上进行训练.就像人类一样:我们通过阅读其他人写的文本(和/或通过听别人说出的句子)来学习语言.
实际上,请看一下Natural Language Toolkit.对于您要编码的任何理论基础,您可能需要查看Chris Manning和HinrichSchütze 的统计自然语言处理基础.
alt text http://nlp.stanford.edu/fsnlp/fsnlp-bigger.jpg