试图提出一种算法来排序西班牙语单词

时间:2010-09-04 18:39:37

标签: java algorithm sorting

我正在编写一个程序来对西班牙语单词进行排序。这些字母几乎与英文字母相同,但只有少数例外。

a,b,c,ch,d,e,f,g,h,i,j,k,l,ll,m,n,ñ,o,p,q,r,rr,s,t,u,v,w,x,y,z

此外,对于这个问题,假设任何一个可以代表字母的字符都可以;例如,组合ch将始终表示字母ch,而不是字母c后跟字母h。

现在如果没有额外的字母,我可以轻松地排序,但是你能帮助我想一个算法来帮我分类吗?

5 个答案:

答案 0 :(得分:11)

通常,应使用Collator进行特定于语言的排序以进行字符串比较。对于西班牙语,您可以使用:

Collator collator = Collator.getInstance(new Locale("es", "ES"));

如果这是家庭作业,我想你自己需要拿出一些东西。

答案 1 :(得分:1)

我只是将每个字母(从组合开始)映射为2位数字(从10开始)。

a - 10 b - 11 c - 12 ch - 13 d - 14 等

诀窍是在搜索单字母之前先搜索成对的字母(ch,ll,rr)。

所以 - 采取像llave这样的步骤将是

23ave 2310ve 231035e 23103515

如果您将数字排序为字符串(以便1111在90之前出现),则应该生成正确的顺序。

如果您可以进行'排序',那么只需将数字与原始单词配对即可。使用您创建的数字作为排序键。

如果您无法进行“排序”,那么您需要将数字拆分回2位数代码,并在排序后将其转换回字母。

答案 2 :(得分:0)

您需要考虑该语言中拼写的具体细节,以决定“ll”是否为“l”“l”或实际上是“ll”。这对你来说很明显。

我提出这个问题的关键在于这是问题的症结所在。您将需要预处理输入,以便将这些不明确的双字母编码为一个字母。使用像普通的旧ASCII文本文件这样的商店媒体,这是不可能的。

您的另一个选择是依靠一些统计方法来确定信件配对是1个西班牙语字母还是2个字母。通过将整个单词的内容纳入上下文,您可以使用先验概率来确定这一点。贝叶斯技术可能运作良好。

答案 3 :(得分:0)

首先尝试将每个单词解析为一个数组或一组字母组,然后通过比较解析后的字母组进行排序。

答案 4 :(得分:0)

LL不是西班牙语的一封信;曾经被认为是由于一些皇家西班牙语言学院的愚蠢,但他们终于承认这是一个有向图。很长一段时间以来,学术界,教科书,西班牙语语言环境等都没有被认为是一封信。混乱来自于西班牙语字母非常接近音素,LL和CH用于表示不同的音素。