Попытка придумать алгоритм сортировки по испанским словам - PullRequest
1 голос
/ 04 сентября 2010

Я пишу программу для сортировки испанских слов. Буквы почти такие же, как в английском алфавите, только с некоторыми исключениями.

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 ]

11 голосов
/ 04 сентября 2010

Как правило, сортировка по конкретному языку должна выполняться с использованием Collator для сравнения строк.Для испанского вы можете использовать:

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

Если это домашнее задание, я думаю, вам нужно что-то придумать самостоятельно.

1 голос
/ 04 сентября 2010

Я бы просто отобразил каждую букву (начиная с комбинаций) как двузначное число (начиная с 10).

а - 10 б - 11 с - 12 ч - 13 д - 14 и т.д.

Хитрость заключается в том, чтобы сначала искать парные буквы (ch, ll, rr), прежде чем искать однобуквенные.

Итак, если взять слово типа llave, шаги будут

23ave 2310ve 231035e 23103515

Если вы сортируете числа как строки (так, чтобы 1111 предшествовал 90), это должно привести к правильному порядку.

Если вы можете выполнить «сортировку по», просто соедините число с исходным словом. Используйте номер, который вы создали, в качестве ключа сортировки.

Если вы не можете выполнить «сортировку», вам нужно разбить число обратно на 2-значные коды и преобразовать их в буквы после того, как вы отсортировали.

0 голосов
/ 06 июня 2012

LL - не письмо на испанском языке; раньше его считали таковым из-за какой-то глупости Королевской академии испанского языка, но в конце концов они признали, что это диграф. В течение достаточно долгого времени это не считалось письмом в научных кругах, учебниках, испанских локалях и так далее. Путаница возникла из-за того, что испанские буквы были очень близки к фонемам, а LL и CH использовались для обозначения разных фонем.

0 голосов
/ 04 сентября 2010

попробуйте сначала разобрать каждое слово в массив или список буквенных групп, а затем отсортировать, сравнив проанализированные буквенные группы.

0 голосов
/ 04 сентября 2010

Вам нужно будет учесть особенности написания на языке, чтобы решить, является ли, например, «ll» «l», «l» или действительно «ll».Это очевидно для вас.

Я хочу сказать, что в этом суть проблемы.Вам необходимо предварительно обработать ввод, чтобы эти неоднозначные двойные буквы были закодированы как одна буква.Для таких носителей, как обычные старые текстовые файлы ASCII, это будет невозможно.

Другой вариант - полагаться на статистическую достоверность при определении, является ли буквенное спаривание одной испанской или двумя.Принимая во внимание содержание всего слова, вы можете использовать предыдущие вероятности, чтобы определить это.Байесовская техника может хорошо работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...