适用于N-gram的CoreNLP API?

时间:2015-04-27 20:54:21

标签: nlp stanford-nlp n-gram pos-tagger

CoreNLP是否有获取unigrams,bigrams,trigrams等的API?

例如,我有一个字符串"I have the best car "。我很想得到:

I
I have
the
the best
car

基于我传递的字符串。

2 个答案:

答案 0 :(得分:2)

如果您使用Java编码,请查看CoreNLP中StringUtils类中的getNgrams *函数。

您也可以使用CollectionUtils.getNgrams(StringUtils类也使用它)

答案 1 :(得分:1)

您可以使用CoreNLP进行标记,但是为了获取n-gram,可以使用您正在使用的任何语言进行本地化。例如,如果您将其汇总到Python中,则可以使用列表切片和一些列表推导将它们分开:

>>> tokens
['I', 'have', 'the', 'best', 'car']
>>> unigrams = [tokens[i:i+1] for i,w in enumerate(tokens) if i+1 <= len(tokens)]
>>> bigrams = [tokens[i:i+2] for i,w in enumerate(tokens) if i+2 <= len(tokens)]
>>> trigrams = [tokens[i:i+3] for i,w in enumerate(tokens) if i+3 <= len(tokens)]
>>> unigrams
[['I'], ['have'], ['the'], ['best'], ['car']]
>>> bigrams
[['I', 'have'], ['have', 'the'], ['the', 'best'], ['best', 'car']]
>>> trigrams
[['I', 'have', 'the'], ['have', 'the', 'best'], ['the', 'best', 'car']]

CoreNLP非常适合做NLP繁重的工作,例如依赖关系,coref,POS标记等。如果您只是想要进行标记化,就像将消防车带到水枪战中一样,这似乎有些过分。使用类似TreeTagger的内容可能同样满足您对标记化的需求。