NLP中的英文单词分词?

时间:2013-12-20 03:31:23

标签: web nlp text-segmentation

我是NLP领域的新手,但我目前的研究需要从URL地址进行一些文本解析(或称为关键字提取),例如:假URL,

http://ads.goole.com/appid/heads

我的解析有两个约束,

  1. 第一个“广告”和最后一个“头”应该是截然不同的,因为“头部”中的“广告”意味着更多的后缀而不是广告。

  2. “appid”可以解析为两部分;这是'app'和'id',两者都在互联网上采用语义。

  3. 我尝试了Stanford NLP工具包和Google搜索引擎。前者尝试将每个单词分类为符合我期望的语法意义。谷歌引擎显示更多关于“appid”的智能,它给了我关于“app id”的建议。

    我无法查看Google搜索中搜索历史记录的引用,因此它为我提供了“app id”,因为有很多人搜索过这些字词。我可以获得一些离线行方法来执行类似的解析吗?


    更新:

    请跳过正则表达式的建议,因为即使是简单的网址,也有一些可能未知数量的单词组合,例如“appid”。

    谢谢,

    贾敏

2 个答案:

答案 0 :(得分:7)

而不是标记化,它真正想要做的事情称为分词。例如,这是一种了解航天的能力的方法。

我没有完成整个教程,但这应该让你开始。他们甚至将网址作为一个潜在的用例。

http://jeremykun.com/2012/01/15/word-segmentation/

答案 1 :(得分:1)

Python wordsegment module可以做到这一点。它是Apache2许可的英文分词模块,用纯Python编写,基于万亿字的语料库。

基于Peter Norvig撰写的“美丽数据”(Segaran and Hammerbacher,2009)中的“自然语言语料库数据”一章中的代码。

数据文件来自Google Web万亿字词语料库,如Thorsten Brants和Alex Franz所述,并由语言数据联盟分发。该模块仅包含该数据的子集。单字组数据仅包括最常见的333,000个单词。同样,二元数据仅包括最常见的250,000个短语。每个单词和短语都是小写的,删除了标点符号。

使用pip

轻松安装
$ pip install wordsegment

只需致电segment即可获取字词列表:

>>> import wordsegment as ws
>>> ws.segment('http://ads.goole.com/appid/heads')
['http', 'ads', 'goole', 'com', 'appid', 'heads']

正如您所注意到的那样,旧语料库并没有排名" app id"很高。没关系。我们可以很容易地教它。只需将其添加到bigram_counts词典。

>>> ws.bigram_counts['app id'] = 10.2e6
>>> ws.segment('http://ads.goole.com/appid/heads')
['http', 'ads', 'goole', 'com', 'app', 'id', 'heads']

我通过Google搜索" app id"来选择值10.2e6。并注意结果的数量。