首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本切分:基于字典的分词

文本切分:基于字典的分词
EN

Stack Overflow用户
提问于 2011-01-02 22:32:25
回答 2查看 7.4K关注 0票数 5

背景

将数据库列名拆分为等效的英文文本,以便为数据字典注入种子。英语词典是由公司文档、wiki和电子邮件组成的。字典(lexicon.csv)是一个包含单词和概率的CSV文件。因此,一个人写“治疗师”(电子邮件或维基页面)的频率越高,“治疗师的名字”分裂成“治疗师的名字”的几率就越高,而不是其他的事情。(词汇可能连强奸犯这个词都不包括在内。)

源代码

  • TextSegmenter.java @ http://pastebin.com/taXyE03L
  • SortableValueMap.java @ http://pastebin.com/v3hRXYan

数据文件

  • lexicon.csv - http://pastebin.com/0crECtXY
  • columns.txt - http://pastebin.com/EtN9Qesr

问题(更新2011-01-03)

遇到下列问题时:

代码语言:javascript
复制
dependentrelationship::end depend ent dependent relationship
end=0.86
ent=0.001
dependent=0.8
relationship=0.9

这些可能的解决办法有:

代码语言:javascript
复制
dependentrelationship::dependent relationship
dependentrelationship::dep end ent relationship
dependentrelationship::depend ent relationship

词汇包含单词及其相对概率(基于词频):dependent 0.8end 0.86relationship 0.9depend 0.3ent 0.001

消除dep end ent relationship的解决方案,因为dep不在词典中(即75%的单词用法),而另外两种解决方案涵盖了词汇中100%的单词。在其余的解中,dependent relationship的概率为0.72,而depend ent relationship的概率为0.00027。因此,我们可以选择dependent relationship作为正确的解决方案。

相关

问题

给予:

代码语言:javascript
复制
// 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;

如何实现一个基于字典覆盖率和概率的最有可能的解决方案的例程?例如:

代码语言:javascript
复制
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() );
}

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-01-24 15:44:43

彼得·诺维格用蟒蛇写了一些东西。

http://norvig.com/ngrams/ngrams.py

包含一个称为段的函数。它运行的是一系列单词的朴素贝叶斯概率。效果很好。可以为您在java中完成的工作奠定良好的基础。

票数 1
EN

Stack Overflow用户

发布于 2011-01-02 23:09:51

你的问题在NLP中是很常见的--不要从重新发明轮子开始--它将花费你很长的时间,而不是已经存在的问题。

当然,您应该首先了解NLP库提供的内容:正在处理中工具包。您的问题是一个常见的问题,有不同的方法,您将需要探索您的语料库。

在连字符例程中可以找到您的分词。两种可能的方法是n-克(例如,4个字符子串的频率用于预测边界)和显示单词的共同开头或结尾的尝试。其中一些可能有助于拼写错误。

但是没有一个琐碎的答案--找到对你最有效的方法。

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

https://stackoverflow.com/questions/4580877

复制
相关文章

相似问题

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