Как сравнить слова, относящиеся к разным частям речи и определить однокоренные они или нет?
Пытаюсь решить вот такую задачку:
Есть два текста #1 и #2. Нужно каждое предложение из #1 сравнить с предложениями из #2, и если в обоих предложениях находятся общие однокоренные части речи, то такую пару предложение из #1 и предложение из #2 записываем в табличку.
К примеру:
- в #1 есть предложение "Разрабатывать графики проведения технического диагностирования, экспертизы промышленной безопасности поднадзорного оборудования."
- в #2 есть предложение "Разработка графиков проведения технического диагностирования"
По нормальным формам тут не сравнишь, стемминг тоже не поможет. Вроде как решение в лоб сравнивать каждое слово из предложения #1 с каждым словом из предложения #2, скажем с помощью библиотеки fuzzywuzzy. Но это долго, т.к. в тексте #1 в среднем 30 строк, а текст #2 насчитывает более 5000 строк. Но опять же расстояния между словами могут быть разными (это в приведенном примере слова сразу друг за другом идут, но это идеальный пример).
Появилась мысль создать что-то вроде словарика с ключевыми словами, примерно такой структуры: "разрабатывать график диагностирования:разработка график диагностирования".
Проверять наличие всех словарных слов из левой части первой строки словаря с первым предложением из #1. Если все в наличии - True. Потом проверяем наличие слов из правой части первой словарной строки в первом предложении из #2, потом со вторым предложением из #2 и т.д. Если все в наличии - то тоже True. Все это загоняем во вложенные циклы и в итоге получаем искомую табличку (номера предложений только для примера):
1е предложение из #1: 1е предложение из #2
1е предложение из #1: 10е предложение из #2
1е предложение из #1: N-е предложение из #2
.....
20е предложение из #1: 2е предложение из #2
....
K-е предложение из #1: N-е предложение из #2
Тоже выходит не быстро, но все же быстрее чем сравнивать все из #1 со всем из #2. Надо словарь формировать, но пока ничего более умного не придумал. Я еще только начинающий, опыта программирования кот наплакал.
Надеюсь, описал все понятно. Надо только еще упомянуть, что это не потоковая задача. А будет, к примеру 100 вариантов текса #1 и один большой #2.
Прошу вашего совета, как можно алгоритм улучшить. Возможно какие-то NLP-библиотеки можно под это дело подключить, или еще что-то.