首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >GoLang PoS标记脚本花费的时间比它在终端中没有输出的时间要长

GoLang PoS标记脚本花费的时间比它在终端中没有输出的时间要长
EN

Stack Overflow用户
提问于 2014-04-27 04:13:58
回答 2查看 702关注 0票数 0

此脚本在play.golang.org:1f中没有出现错误。

但是当我在我的机器上运行时,发生的时间比我预期的要长得多,终端机上什么也没有发生。

我想要构建的是一个PartOfSpeech标签。

我认为最长的部分是将lexicon.txt加载到地图中,然后将每个单词与那里的每个单词进行比较,看看它是否已经在词典中被标记了。词典只包含动词。但不是每个单词都需要检查,看看它是否是一个动词。

更大的问题是,我不知道如何确定一个词是否是一个动词,有一个容易启发的词,如副词、形容词等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-27 07:24:48

在这个函数中有一个大型数组参数:

代码语言:javascript
代码运行次数:0
运行
复制
func stringInArray(a string, list [214]string) bool{
    for _, b := range list{
        if b == a{
            return true;
        }
    }
    return false
}

每次调用此函数时,都会复制秒字数组。

大多数情况下,您应该使用片而不是数组。将此定义更改为list []string,并将stopWords定义为切片而不是数组:

代码语言:javascript
代码运行次数:0
运行
复制
stopWords := []string{
    "and", "or", ...
}

更好的方法可能是构建stopWords的地图:

代码语言:javascript
代码运行次数:0
运行
复制
isStopWord := map[string]bool{}
for _, sw := range stopWords {
    isStopWord[sw] = true
}

然后,您可以快速检查一个单词是否是一个停顿词:

代码语言:javascript
代码运行次数:0
运行
复制
if isStopWord[word] { ... }
票数 0
EN

Stack Overflow用户

发布于 2014-04-29 19:14:25

(引用):

我不知道如何判断一个词是否是一个动词,带有像副词、形容词等简单的启发式。

在Go实现中,我不能谈论任何问题,但我将讨论POS标签的更大问题。听起来你在尝试构建一个基于规则的unigram标签。就这些条款作一点阐述:

  • "unigram“是指你在分别考虑句子中的每个单词。请注意,一个单字标签本身是有限的,因为它不能消除可以使用多个POS标记的单词的歧义。例如,你应该把“鱼”标记为名词还是动词?“最后”是动词还是副词?
  • “基于规则”指的正是它听起来的样子:一组规则,用来确定每个单词的标记。基于规则的标记以一种不同的方式受到限制--需要大量的开发工作来组装规则集,以处理公共语言中歧义的合理部分。如果您使用的是一种我们没有很好的培训资源的语言,但是在大多数普通语言中,我们现在有足够的标记文本来训练高精度的标记模型,这种努力可能是合适的。

最先进的POS标签是97%以上的准确性,在格式良好的新闻专线文本(较不正式的类型的准确性自然较低)。基于规则的标记器可能执行得更糟糕(您必须确定满足您的需求所需的准确性级别)。如果您想继续遵循基于规则的路径,我建议您阅读this tutorial。代码基于Haskell,但它将帮助您学习基于规则的标记中的概念和问题。

尽管如此,我强烈建议您考虑其他标记方法。我提到了字母标注的弱点。相关的方法是“bigram”,意思是我们在标记单词n、trigram(通常是前两个单词,或前一个单词、当前单词和后面的单词)时考虑前面的单词;更普遍的说,“n-gram”是指考虑n个单词的序列(通常是在我们正在标记的单词周围滑动窗口)。这种语境可以帮助我们消除“鱼”、“最后”、“苍蝇”等的歧义。

例如,在

我们钓鱼

我们可能想把鱼标记为动词,而在

吃鱼

这肯定是个名词。

在这里,The NLTK tutorial可能是一个很好的参考。一个实心的n克标签应该能让你达到90%以上的准确率;很可能超过95% (同样出现在新闻专线上)。

更复杂的方法(称为“结构化推理”)将整个标记序列作为一个整体来考虑。也就是说,它们不是试图分别预测每个单词的最可能标记,而是试图预测整个输入序列的最可能的标记序列。当然,结构化推理更难实现和训练,但相对于n-gram方法,通常会提高精度。如果你想了解这方面的情况,我建议Sutton and McCallum's excellent introduction

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23319311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档