|
|
1
81
Viterbi algorithm 要快得多。它计算的分数与上面Dmitry答案中递归搜索的分数相同,但时间为O(n)。(Dmitry的搜索需要指数时间;Viterbi通过动态规划完成。)
测试它:
为了实用,您可能需要一些改进:
|
|
|
2
34
人类能做到吗? farsidebag far sidebag farside bag far side bag
在21行代码中 : http://norvig.com/spell-correct.html
使现代化 两个单词的组合在大多数情况下会超过三个单词的组合,除非频率差异很大。 我在我的博客上发布了这段代码,并做了一些小改动 http://squarecog.wordpress.com/2008/10/19/splitting-words-joined-into-a-single-string/ http://squarecog.wordpress.com/2009/01/10/dealing-with-underflow-in-joint-probability-calculations/ 输出您的文字,再加上我自己的一些文字——注意“orcore”会发生什么: perl splitwords.pl big.txt words answerveal: 2 possibilities - answer veal - answer ve al wickedweather: 4 possibilities - wicked weather - wicked we at her - wick ed weather - wick ed we at her liquidweather: 6 possibilities - liquid weather - liquid we at her - li quid weather - li quid we at her - li qu id weather - li qu id we at her driveourtrucks: 1 possibilities - drive our trucks gocompact: 1 possibilities - go compact slimprojector: 2 possibilities - slim projector - slim project or orcore: 3 possibilities - or core - or co re - orc ore 代码:
|
|
|
3
9
|
|
|
4
8
|
|
|
5
4
我认为你认为这不是正则表达式的工作是对的。我会使用字典的思想来处理这个问题——在字典中查找单词的最长前缀。当你找到它时,把它切掉,然后用剩下的绳子做同样的事情。 上述方法存在歧义,例如“DriveRealFast”会首先找到“driver”,然后遇到“eallyfast”问题。因此,如果遇到这种情况,您还必须进行一些回溯。或者,由于您没有那么多字符串要拆分,只需手动执行自动拆分失败的字符串即可。 |
|
6
3
这与一个称为 或 . 在OP的例子中,输入似乎是普通单词的串联;在标识符拆分中,输入的是类名、函数名或源代码中的其他标识符,问题更难解决。我意识到这是一个老问题,OP要么解决了他们的问题,要么继续前进,但如果其他人在寻找标识符拆分器时遇到这个问题(就像我不久前遇到的),我愿意提供 Spiral (" 它是用Python编写的,但附带了一个命令行实用程序,可以读取标识符文件(每行一个)并拆分每个标识符。
螺旋形的
实现了许多标识符拆分算法,包括一个名为Ronin的新算法。它使用各种启发式规则、英语词典和从挖掘源代码存储库获得的令牌频率表。Ronin可以拆分不使用驼峰大小写或其他命名约定的标识符,包括拆分等情况
使用OP问题中的示例:
更多信息可在 GitHub repo for Spiral |
|
|
7
1
这个问题本身不能用正则表达式来解决。一个解决方案(可能不是最好的)是获得一个字典,并为字典中的每个工作与列表中的每个单词进行正则表达式匹配,只要成功,就添加空格。当然这不会太快,但编程很容易,而且比手工操作要快。 |
|
8
1
需要基于词典的解决方案。如果你有一个有限的词汇词典,这可能会被简化,否则形成其他单词前缀的单词将成为一个问题。 |
|
|
9
1
Santhosh thottingal发布了一个名为mlmorph的python包,可用于形态学分析。 https://pypi.org/project/mlmorph/ 示例:
他还写了一篇关于这个话题的博客 https://thottingal.in/blog/2017/11/26/towards-a-malayalam-morphology-analyser/ |
|
|
10
1
Python的一个简单解决方案:安装
wordsegment
|
|
11
1
其中一种解决方案可以是递归(同样可以转换为动态规划):
|
|
|
12
0
我可能会为此感到沮丧,但是 .
|
|
|
13
0
|
|
|
14
0
|
|
Ben · 统计向量中的单词在字符串中出现的频率 1 年前 |
|
|
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 1 年前 |
|
|
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 1 年前 |
|
|
user764754 · 防止多行原始字符串文字中出现新行字符 1 年前 |
|
|
Bogaso · 从列表中返回与模式匹配的元素 1 年前 |
|
|
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 1 年前 |