2014-12-18 2 views
1

Я пытаюсь создать приложение в Rails, которое поможет пользователям читать китайский текст. Если пользователь нажимает на китайский символ, они получат информацию о произношении и значении.Построение китайско-английского словаря - как определить, какие символы образуют слова?

Я получил это для работы с использованием базы данных китайско-английского словаря. Тем не менее, я не уверен, как определить, является ли персонажем только один символ или часть более длинного слова. Например: у меня есть текст 我是铁公鸡, и пользователь нажимает на слово , что означает «общедоступный», но приложение должно показывать выделение 铁公鸡 как «скряга». Таким образом, персонаж может быть автономным или создавать слова с другими персонажами.

Что такое эффективный способ определения того, что слово образует персонаж? Я думал о проверке целевого символа и его соседей против базы данных и выборе самой длинной комбинации, которую можно найти. Любые другие идеи?

+1

Удивительная проблема для решения. Думаю, вам нужно выделить оба экземпляра, чтобы показать возможные значения. Таким образом, вместо того, чтобы пытаться решить, что показывать, вы показываете пользователю все возможности: один символ в виде слова или слово, составленное несколькими окружающими символами. – Mohamad

+0

хорошая проблема, действительно. Я, вероятно, поеду на выделенный [полнотекстовый поисковик] (http://stackoverflow.com/questions/47656/how-do-i-do-full-text-searching-in-ruby-on-rails), потому что они специализированы в этих прецедентах, но я должен признать, что я не знаю, поддерживает ли какой-либо двигатель китайский язык. –

+0

Я сделал сайт, который делает то, что вы описали: 3000hanzi.com – stevendaniels

ответ

1

Метод, который я использую в pin1yin1.com, состоит в том, чтобы начать с первого символа, найти самую длинную строку символов, которая существует в словаре (я использую CEDICT), затем называть это слово и начинать со следующего символа. Это имитирует последовательный способ, которым мы читаем или слышим слова, и на практике это имеет тенденцию делать это правильно.

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

+0

Спасибо, я постараюсь сделать это. –

1

Вам нужен китайский сегментист. Существует много типов китайских сегментов, включая HMM (метод Hidden-Markov), CRF (условные случайные поля), MM (максимальное совпадение) сегментации (pdg137 использует сегментацию MM). Если вы ищете китайскую сегментацию, вы можете найти программы с открытым исходным кодом, которые используют эти различные стратегии.

Вы должны зарегистрироваться Stanford's Chinese segmentation tool. Это хорошо сделано в сегментационных соревнованиях.

Кстати, я уже создал a website, который делает то, что вы описываете.

Смежные вопросы