我写了一个小的C#程序,它将一堆单词编译成一行文本,我想只使用NLP给我一个百分比的可能性,即一堆单词就是一个句子。如果需要,我不需要令牌或标记,所有这些都可以在后台进行。我的项目中引用了OpenNLP和SharpEntropy,但我想出了一个错误“数组维度超出了支持的范围”。当使用这些时,我也尝试使用IKVM创建的OpenNLP而没有尖锐的熵,但是没有文档,我似乎无法绕过正确的步骤来获得百分比概率。
任何帮助或指示都将不胜感激。
答案 0 :(得分:0)
我会推荐两个相对简单的措施,可以帮助您将单词序列分类为句子/非句子。不幸的是,我不知道SharpNLP将如何处理。 Java,Python和C ++中存在更完整的工具包(LingPipe,Stanford CoreNLP,GATE,NLTK,OpenGRM,......)
语言模型概率:在句子的开头/结尾处使用开始和结束标记的句子训练语言模型。根据该语言模型计算目标序列的概率。语法和/或语义敏感的单词序列将比随机单词序列得分高得多。这种方法应该与标准的n-gram模型,判别条件概率模型或几乎任何其他语言建模方法一起使用。但绝对要从基本的n-gram模型开始。
解析树概率:类似地,您可以测量恢复的选区结构的内部概率(例如,通过概率上下文无关语法解析)。更高的语法序列(即,更可能是完整的句子)将反映在更高的内部概率中。如果按照序列长度进行标准化,则可能会得到更好的结果(同样可能也适用于语言建模方法)。
我在推文上看到了初步(但未发表)的结果,似乎表明归一化概率的双峰分布 - 被人类注释者判断为更具语法性的推文通常落在更高的峰值之内,而那些被认为语法较少的推文聚集成较低的一个。但我不知道这些结果在更大或更正式的研究中会有多好。