我是NLP领域的新手,但我目前的研究需要从URL地址进行一些文本解析(或称为关键字提取),例如:假URL,
http://ads.goole.com/appid/heads
我的解析有两个约束,
第一个“广告”和最后一个“头”应该是截然不同的,因为“头部”中的“广告”意味着更多的后缀而不是广告。
“appid”可以解析为两部分;这是'app'和'id',两者都在互联网上采用语义。
我尝试了Stanford NLP工具包和Google搜索引擎。前者尝试将每个单词分类为符合我期望的语法意义。谷歌引擎显示更多关于“appid”的智能,它给了我关于“app id”的建议。
我无法查看Google搜索中搜索历史记录的引用,因此它为我提供了“app id”,因为有很多人搜索过这些字词。我可以获得一些离线行方法来执行类似的解析吗?
更新:
请跳过正则表达式的建议,因为即使是简单的网址,也有一些可能未知数量的单词组合,例如“appid”。
谢谢,
贾敏
答案 0 :(得分:7)
而不是标记化,它真正想要做的事情称为分词。例如,这是一种了解航天的能力的方法。
我没有完成整个教程,但这应该让你开始。他们甚至将网址作为一个潜在的用例。
答案 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
。并注意结果的数量。