@p4p

Как сравнить строки в c#, чтобы получить результат сравнения в процентах?

Есть допустим текст

Поговори со мной о пустяках,
О вечности поговори со мной.
Пусть, как ребенок, на твоих руках
Лежат цветы, рожденные весной.


Необходимо сравнить строку "поговори со мной как ребенок" и выяснить в процентах количество совпадений. То есть нужно понять, является ли данная строка "описанием текста". Как лучше сравнивать подобное?
  • Вопрос задан
  • 1088 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Так данная строка будет описанием или нет? Считаем, что будет.

1. Бьём строки на слова.
2. Возможно, выкинуть незначащие слова и преобразовать все в базовую форму. Надо признаться, тяжёлое дело: если нет словаря, то «дочь генерала» — это сущ+глагол или сущ+сущ? А со словарём: «уж» — это частица или существительное? В общем, лучше выдавать все возможные основания, и у нас получается нетранзитивное «=» — OK, если совпадает хотя бы одна форма. Возможно, проводим ёфикацию или деёфикацию: первое сложнее, второе чревато ложными срабатываниями.
3. Вычисляем расстояние Левенштейна между этими массивами, считая неделимыми сущностями не буквы, а слова.
4. Преобразуем его в наш процент — например, % = d / max{|s1|, |s2|}.

Можно продолжать: если совпадение не только по основанию, но и по форме — дополнительные очки. Работать с синонимами, как из словаря, так и ручными, например, небезызвестный Milfgard придумал игру «Шакал», и вручную, по результатам исследования логов, вписал синоним «Койот». А нужно ли работать с орфоошибками? В том числе с неправильным написанием слова наподобие «джин/джинн»? И тот, и другой встречается в бутылке, но первый пьют, второй исполняет желания. :)

В общем, задача исследовательская, и важная её часть — понять, где остановиться и чего хватит, чтобы решить задачу более высокого уровня.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmitrievMV
достать из сток коллекцию слов(с учетом склонений?) и сравнивать колво совпадений
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы