2009-08-18 4 views
1

Мне нужна хорошая обработка слов для Java. Не слишком сложно, за исключением одной морщинки: поскольку я работаю над интернационализированным приложением, он должен правильно обрабатывать китайский, японский и корейский текст. В этих языках перенос слов происходит между символами, так как сами символы являются словами и пробелов нет. Не только это, но поскольку этот текст может включать в себя иностранные слова, сделанные латинскими символами, те слова должны обрабатываться специально и не разбиваться между такими символами, как остальная часть текста. Обертка должна поддерживаться как для текстового, так и для графического контекста (координаты, выраженные в единицах символов или пикселей).Интернационализированная перенос слов в Java

Есть ли существующий пакет, который это делает? Я его не видел. Если нет, может ли кто-нибудь показать мне хороший алгоритм для обработки этого сценария? Код должен иметь доступ к объекту Locale, соответствующему языку текста, который должен быть обернут, если необходимо. Жадный алгоритм (каждая строка занимает как можно больше текста) в порядке.

ответ

3

BreakIterator должен помочь здесь с разбиением последовательностей символов на слова. Если этого недостаточно, я бы проверил ICU project, чтобы узнать, есть ли у него что-то лучшее (некоторые из реализаций Java идут оттуда). Графическая обработка будет зависеть от вашей графической библиотеки, но API AWT/Swing Font поддерживает определение показателей линии. (Если у вас не было экземпляров «Locale», вы, вероятно, могли бы сделать что-то эвристическое, используя Unicode blocks.)

1

Оказывается, библиотека ICU4J может делать то, что вам нужно. См. boundary analysis. Приведенные примеры предназначены для ICU4C и поэтому находятся в C/C++, но также должны работать с пакетом Java.

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