gra*_*nja 0 nlp go part-of-speech
这个脚本在play.golang.org中没有错误地编译:http://play.golang.org/p/Hlr-IAc_1f
但是当我在我的机器上运行时,比我预期的要长得多,终端中没有任何事情发生.
我想要构建的是PartOfSpeech Tagger.
我认为最长的部分是将lexicon.txt加载到地图中,然后将每个单词与每个单词进行比较,以查看它是否已经在词典中被标记.词典只包含动词.但不是每个词都需要检查,看它是否是一个动词.
更大的问题是我不知道如何判断一个单词是否是一个动词,其中包含副词,形容词等简单的启发式动词.
(引用):
我不知道如何判断一个单词是否是一个带有副词,形容词等简单启发式的动词.
我不能说你的Go实现中的任何问题,但我将解决一般的更大的POS标记问题.听起来你正在尝试构建一个基于规则的unigram标记器.详细说明这些条款:
对于格式正确的新闻专线文本,POS标签的最新技术准确度超过97%(不太正式的类型的准确性自然更低).基于规则的标记器可能会执行得更糟(您必须确定满足您的要求所需的准确性级别).如果您想继续沿着基于规则的路径,我建议您阅读本教程.该代码基于Haskell,但它将帮助您了解基于规则的标记中的概念和问题.
也就是说,我强烈建议您查看其他标记方法.我提到了unigram标记的弱点.相关的方法是'bigram',这意味着我们在标记单词n,'trigram'(通常是前2个单词,或前一个单词,当前单词和后面的单词)时考虑前一个单词; 更一般地说,'n-gram'指的是考虑n个单词的序列(通常是我们当前正在标记的单词周围的滑动窗口).这种背景可以帮助我们消除"鱼","最后","苍蝇"等歧义.
例如,在
我们钓鱼
我们可能想把鱼标记为动词,而在
吃鱼
它肯定是名词.
NLTK教程可能是一个很好的参考.一个坚实的n-gram标记符可以使你达到90%以上的准确率; 可能高于95%(再次在新闻专线文本上).
更复杂的方法(称为"结构化推理")将整个标记序列视为一个整体.也就是说,它们不是试图分别预测每个单词的最可能标记,而是尝试预测整个输入序列的最可能的标记序列.结构化推理当然更难以实现和训练,但通常会提高准确度与n-gram方法.如果你想阅读这个领域,我建议Sutton和McCallum的精彩介绍.