背景
将数据库列名拆分为等效的英文文本,以便为数据字典注入种子。英语词典是由公司文档、wiki和电子邮件组成的。字典(lexicon.csv)是一个包含单词和概率的CSV文件。因此,一个人写“治疗师”(电子邮件或维基页面)的频率越高,“治疗师的名字”分裂成“治疗师的名字”的几率就越高,而不是其他的事情。(词汇可能连强奸犯这个词都不包括在内。)
源代码
数据文件
问题(更新2011-01-03)
遇到下列问题时:
dependentrelationship::end depend ent dependent relationship
end=0.86
ent=0.001
dependent=0.8
relationship=0.9这些可能的解决办法有:
dependentrelationship::dependent relationship
dependentrelationship::dep end ent relationship
dependentrelationship::depend ent relationship词汇包含单词及其相对概率(基于词频):dependent 0.8、end 0.86、relationship 0.9、depend 0.3和ent 0.001。
消除dep end ent relationship的解决方案,因为dep不在词典中(即75%的单词用法),而另外两种解决方案涵盖了词汇中100%的单词。在其余的解中,dependent relationship的概率为0.72,而depend ent relationship的概率为0.00027。因此,我们可以选择dependent relationship作为正确的解决方案。
相关
问题
给予:
// The concatenated phrase or database column (e.g., dependentrelationship).
String concat;
// All words (String) in the lexicon within concat, in left-to-right order; and
// the ranked probability of those words (Double). (E.g., {end, 0.97}
// {dependent, 0.86}, {relationship, 0.95}.)
Map.Entry<String, Double> word;如何实现一个基于字典覆盖率和概率的最有可能的解决方案的例程?例如:
for( Map.Entry<String, Double> word : words ) {
result.append( word.getKey() ).append( ' ' );
// What goes here?
System.out.printf( "%s=%f\n", word.getKey(), word.getValue() );
}谢谢!
发布于 2011-01-24 15:44:43
彼得·诺维格用蟒蛇写了一些东西。
http://norvig.com/ngrams/ngrams.py
包含一个称为段的函数。它运行的是一系列单词的朴素贝叶斯概率。效果很好。可以为您在java中完成的工作奠定良好的基础。
发布于 2011-01-02 23:09:51
你的问题在NLP中是很常见的--不要从重新发明轮子开始--它将花费你很长的时间,而不是已经存在的问题。
当然,您应该首先了解NLP库提供的内容:正在处理中和工具包。您的问题是一个常见的问题,有不同的方法,您将需要探索您的语料库。
在连字符例程中可以找到您的分词。两种可能的方法是n-克(例如,4个字符子串的频率用于预测边界)和显示单词的共同开头或结尾的尝试。其中一些可能有助于拼写错误。
但是没有一个琐碎的答案--找到对你最有效的方法。
https://stackoverflow.com/questions/4580877
复制相似问题