2010-05-24 2 views
5

У меня есть два фрагмента текста. Я хотел бы сделать разницу между ними на основе слов (например, утилита unix unix wdiff), но с дополнительной информацией на выходе (я имею в виду, положение персонажа, в котором начинается добавленное/децитированное слово).Существуют ли библиотеки java для разбора слов?

Мне нужно сделать это на Java, поэтому простой вывод различий (например, wdiff) не подходит для меня: я хотел бы манипулировать объектами, представляющими различия.

+0

см. Http://stackoverflow.com/questions/479654/java-library-for-free-text-diff – mdma

+0

Спасибо, но это не то, что я ищу: я хотел бы использовать слово diff, но не просто имеют выход, но могут манипулировать этими данными. На мой взгляд, есть Java объект с этими полями: - файл Позиция добавления/удаления в первой (или второй, кстати) - Добавить/Удалить - строка (слово) добавлен (или удален) – Mycol

ответ

3

Есть Diff,Match,Patch - доступно на Java, а демо доступно - это, по-видимому, делает разницу слов.

+1

Я много пробовал и баиально основан. Если вы хотите, чтобы человеческий аутпульт вам нужно было установить очень долгое время, вычисление происходит очень медленно и, тем не менее, не основано на словах (я имею в виду, что «дом» и «жена» отличаются друг от друга только в «доме» и «с»,) – Mycol

+0

Вы видите раздел по очистке после обработки? Возможно, вы сможете добавить почтовый процессор, который выравнивает различия между словами. Это текст на английском языке? Когда вы поднимаете уровень до слов, проблема становится более сложной. Даже просто токенизация текста в словах - это некоторые усилия, и тогда у вас есть проблема устранения неоднозначности различий - изменения могут быть истолкованы несколькими способами - что имеет смысл, может зависеть от вашего приложения. Обработка блоков текста, вырезанных и вставленных в другое место, в принципе является одной операцией, но обнаружить это может быть сложно. – mdma

+0

Если вы можете сопоставить слова с символами (например, убедитесь, что есть не более 64k уникальных слов.) Затем вы можете самостоятельно разобрать текст, сопоставить каждое слово персонажу и выполнить различие символов на нем. Конечно, если реализация алгоритма Diff такова, что вы можете легко заменить сравниваемые типы данных, тогда вы можете тривиально реализовать различие слов, передавая объекты слов как входные, а не символы. Я не видел Diff api, поэтому не могу сказать точно. – mdma

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