斯坦福NER - 无法识别电话号码

时间:2017-02-23 13:03:23

标签: java stanford-nlp

我正在训练我的NER到实体类型Phonenumber,其词性是数字。但是,当我测试我训练过的相同数据时,分类器不会识别电话号码。 enter image description here

是因为电话号码的词性(POS)是数字(CD)吗?

1 个答案:

答案 0 :(得分:0)

您可能希望使用regexner代替此用例。

考虑这句话(把它放在phone-number-example.txt中):

You can reach the office at 555 555-5555.

如果你制作一个这样的regexner规则文件(注意每列是分隔符的)

[0-9]{3}\W[0-9]{3}-[0-9]{4}     PHONE_NUMBER    MISC,NUMBER     1

运行此命令:

java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,regexner -regexner.mapping phone_number.rules -file phone-number-example.txt -outputFormat text

它将识别输出NER标记中的电话号码。

需要注意的一个问题。你会注意到标记器转动" 555 555-5555"一个令牌。规则文件的第一列是与令牌匹配的正则表达式。正则表达式模式是一个空格分隔的模式列表,它们匹配您想要标记的每个标记。

所以在这个例子中,我制定的规则有一个" \ W"占领空间。当我使用" \ s"等时,规则不起作用。所以我认为为包含空格的标记编写正则表达式存在问题。通常,令牌不包含空格。

所以你可能想通过扩展" \ W"来解决这个问题。并排除你不想要的其他字符,因为" \ W"只是意味着非单词字符。此外,您显然可以使我刚刚列出的模式更复杂,并捕获各种电话号码模式。

有关RegexNER的更多信息,请访问:

http://nlp.stanford.edu/software/regexner.html