什么是算法 - 似乎在域名停放页面上使用 - 这需要一个spaceless一堆话(如“thecarrotofcuriosity”)和更多或更少正确地将其分解成构成词(如“好奇胡萝卜”)?
Answer 1:
首先得有个基本的特里代表你的字典数据结构。 当你在字符串中的字符遍历,搜索通过自己的方式特里结构一组指针,而不是一个单一的指针 - 设定与特里树的根部接种。 每个字母,整个集是在一次通过由字母表示的指针前进,并且如果一组元件不能由字母被推进,它是从集合中移除。 每当你到达一个可以结束的话,添加新根的-线索到集(跟踪见过的词,与该组元素相关联的列表)。 最后,当所有的字都经过处理,返回字的任意列表是在根的-线索。 如果有一个以上,这意味着该字符串可以以多种方式(如“therapistforum”,它可以被解析为[“治疗师”,“论坛”]或[“的”,“强奸犯”,“论坛”被打破了]),它是不确定的,我们会回来。
或者,在wacked了伪代码(Java的foreach,元组括号表示,集表示与支架, 利弊用头::尾,[]空列表):
List<String> breakUp(String str, Trie root) {
Set<(List<String>, Trie)> set = {([], root)};
for (char c : str) {
Set<(List<String>, Trie)> newSet = {};
for (List<String> ls, Trie t : set) {
Trie tNext = t.follow(c);
if (tNext != null) {
newSet.add((ls, tNext));
if (tNext.isWord()) {
newSet.add((t.follow(c).getWord() :: ls, root));
}
}
}
set = newSet;
}
for (List<String> ls, Trie t : set) {
if (t == root) return ls;
}
return null;
}
让我知道如果我需要澄清或我错过了什么?
Answer 2:
我会想象他们采取的字典单词列表像/usr/share/dict/words
您共同或花园的各种Unix系统,并试图找到字匹配的套(从左边开始?)导致原始文本的最大金额通过一个匹配被覆盖。 一个简单的广度优先搜索的实现可能会工作得很好,因为它显然不具有运行速度快。
Answer 3:
我拍摄这些网站做类似这样的:
- 获取单词的列表,您的目标语言
- 删除,如“一”,“无用”的话说,“”,...
- 在列表中运行,并检查它的话是该域名的子串
- 在剩下的列表中最常见的词(或那些具有最高的AdSense等级,...)
当然,这导致废话expertsexchange,但什么人会想到你那里...
Answer 4:
(免责声明:我没有尝试它自己,所以把它仅仅作为实验食品4克采取大多是出于蓝天,刚刚从我的经验,3克,将无法正常工作都非常清楚; 5。克,更可能会更好地工作,即使你将不得不面对一个漂亮的大表)。 这也是在一定意义上简单的,它并没有考虑到该帐户的字符串的结束 - 它是否适合你,否则,你可能需要考虑固定的结局。
该算法将在可预见的时间与您试图拆分字符串的长度运行。
所以,第一:以大量人类可读的文本。 对于每个文本的,假定它是在一个单一的字符串str,运行下面的算法(伪上下的表示法,假设[]是一个哈希表的索引等,并且不存在的索引返回“0”):
for(i=0;i<length(s)-5;i++) {
// take 4-character substring starting at position i
subs2 = substring(str, i, 4);
if(has_space(subs2)) {
subs = substring(str, i, 5);
delete_space(subs);
yes_space[subs][position(space, subs2)]++;
} else {
subs = subs2;
no_space[subs]++;
}
}
这将为你的表,这将有助于确定一个给定的4克是否需要有一个空间在它插入。
然后,把你的字符串分割,我记为XSTR,并做到:
for(i=0;i<length(xstr)-5;i++) {
subs = substring(xstr, i, 4);
for(j=0;j<4;j++) {
do_insert_space_here[i+j] -= no_space[subs];
}
for(j=0;j<4;j++) {
do_insert_space_here[i+j] += yes_space[subs][j];
}
}
然后,你可以走“do_insert_space_here []”阵列-如果在给定位置处的元素大于0,那么就应该在原始字符串该位置插入一个空格。 如果是小于零,那么你不应该。
请在此处掉落注意:如果尝试它(或这种东西)和它的作品(或不工作)为您:-)