Как искать однокоренные слов в русских текстах?
Здравствуйте
не получается найти опитимальное решение для поиска однокоренных слов в текстах на русском языке
что пробовал
-алгоритмы стеммирования (библиотеки wamania и ladamalina)
-эти стеммеры на базе алгоритма Поттера не умеют убирать приставки и вообще криво работают
— пытался использовать api wikimedia, но это долго работает и к тому же там есть не все слова (хотя wictionary и знает где корень в слове, он не знает многих слов)
Найти пригодной версии словаря Тихонова (или другого с морфемами) не получилось
Может быть кто то встречался с такой проблемой?
спасибо за ответы
-
Вопрос заданболее трёх лет назад
-
1883 просмотра
Пригласить эксперта
Сейчас я пишу диплом по компьютерной лингвистике, а именно по разбиению слов по составу.
Я пришел к выводу, что никак. Вы никак не найдете однокоренные слова со 100% точностью. В этом может помочь только словарь с уже заготовленными однокоренными словами.
Вы можете пробовать выделять корни в словах:
1) По словарю с разбиением на корни (я нашел только 1, да и то в нем не указаны где какие морфемы www.speakrus.ru/dict/ UPD: это тот же словарь Тихонова, о котором вы писали).
2) По правилам, составление которых — это титанический труд.
Допустим, вы нашли корни в словах «красивый» и «красить». Это «крас». Однокореные ли это слова? Думаю, нет. Потому важен еще и смысл слов. Вы можете лишь представить несколько возможных вариантов, но со 100% точностью разобрать текст по однокоренным словам вы не сможете без словаря с перечисленными человеком однокоренными словами. Где его достать — я не знаю. Пожалуйста, отпишитесь если чего откопаете.
копайте в сторону морфологического разбора.
так и гуглите.
существуют готовые инструменты и наборы правил для них.
удачи
-
Показать ещё
Загружается…
30 мая 2023, в 00:55
125000 руб./за проект
30 мая 2023, в 00:34
1000 руб./за проект
29 мая 2023, в 23:21
2000 руб./за проект
Минуточку внимания
Вопрос знатокам: можно как-то в ворде сделать так, что-бы выделялись одинаковые слова в тексте или с одинаковым корнем ?
С уважением, vghbh
Лучшие ответы
Goran:
Легко.. . Жмешь «Правка», выбираешь «Найти» (кнопочка с биноклем) , в появившемся окошке в строку вводишь нужное слово или сочетание букв (то бишь корень) , ставишь галочку «Выделить все элементы, найденные в», в раскрывающемся списке выбираешь «Основной документ» и далее жмешь «Найти далее». Все твои слова выделятся.. .
Кстати, если надо, чтобы они выделились раз и навсегда, используй в том же окошке вкладку «Заменить». В поле найти делаешь как я уже писал, в поле «заменить на» вводишь тоже самое слово, потом нажимаешь кнопку «Формат», в раскрывшимся списке — «Шрифт», выбираешь желаемый параметр (например Курсив или Цвет шрифта) , потом «Ок» и жмешь «Заменить все.
Sova Sova:
Меню «Правка», потом «Найти». В появившемся окошке набираете слово или корень слова. Должно помочь 🙂
Видео-ответ
Это видео поможет разобраться
Ответы знатоков
Михаил Корнющенков:
нажми Ctrl+F
Задумчивая:
там есть такая строчка в Меню- Правка..-«найти «называется
еще биноколь нарисован на панельке
ACCUSED:
нажми ctrl+F и вводи слово которое хочеш искать
~Energy~:
поиск сделай …
Пользователь удален:
поиск — пишеш слово «мама» и ищеш
Secret:
понимаю, что вопрос технический
как наладить поиск в Ворде?
но в этой транскрипции: у меня большой текст, и мне лень его читать,
пугает:
ужас
до чего народ обленился…
я в шоке
то есть уже огород не копают
картофель не выращивают,
рожь не жнут, хлеб не пекут,
не шьют и не вяжут,
стирает машина, дров не надо,
теперь слово найти в тексте — уже за труд считают
и куда мы так дошагаем???
Тимофей Кулибин:
Найдите в самой панели инструментов такую вещь как «поиск». Туда вбиваете сам корень и выделеные слова меняете
-
#1
Здравствуйте.
Хочу узнать сколько раз на страницах сайта, встречаются слова с корнем — дом, домовой…
Слово необязательно должно быть корнем.
Например, на сайте https://www.forexfactory.com/ посчитать сколько раз встречаются слова содержащие «divergence» если больше чем N раз то сохранить их в файл, каждое с новой строки. Можно сразу сохранять в файл, потом посчитаю.
Сохранить нужно все слова — «divergence», «divergence_rsi» или «macd-divergence», в общем всё что не отделено пробелом от «divergence».
Как действовать?
-
#2
Слова divergence на сайте https://www.forexfactory.com/ не нашел, сделал для корня «Germ» (Germany)
$str = InetRead("https://www.forexfactory.com/") ;читаем страницу
$find = StringRegExp(BinaryToString($str, 4), "(Germ[^h]*)h", 3) ;ищем слова, начинающиеся на "Germ" и записываем их в массив
If IsArray($find) And UBound($find) >= 3 Then ;если найдено 3 и более слов
For $i in $find
FileWriteLine(@ScriptDir & "foundedwords.txt", $i) ;записываем слова в файл foundedwords.txt
Next
EndIf
-
#3
hedji
Спасибо, однако считает только на первой странице. Как посчитать на всех страницах сайта?
Добавлено:
Сообщение автоматически объединено: 14 Авг 2018
Слово необязательно должно начинаться на «Divergence». Возможные варианты: «WPR_Divergence.mq4», «Divergence~!@#$%^&*()_» «RSI_Divergence_v2».
-
#4
Собираю сторонним софтом ссылки в файл. Из скрипта читаю и перехожу по ним.
Но как сделать чтобы сохранялись слова перед которыми есть символы например ищу «pai» находит «pairs»,
«pair..» нужно чтобы находил ещё и «multipair». Как это сделать?
#include <File.au3>
$oFile = FileOpen("lin.txt")
While 1
$oURL = FileReadLine($oFile)
If @error Then ExitLoop
$str = InetRead($oURL) ;читаем страницу https://www.forexfactory.com/showthread.php?t=526638
$find = StringRegExp(BinaryToString($str, 4), "(pai[^h]*)h", 3) ;ищем слова
If IsArray($find) And UBound($find) >= 3 Then ;если найдено 3 и более слов
For $i in $find
FileWriteLine(@ScriptDir & "foundedwords1.txt", $i) ;записываем слова в файл foundedwords.txt
Next
EndIf
Sleep(1000)
WEnd
FileClose($hFile)
-
#5
$word = "pai"
$find = StringRegExp(BinaryToString($str, 4), "(?i)S*" & $word & "S*", 3) ;ищем слова
-
#6
InnI, Спасибо.
Не считает если есть спец. символы,
не видит «Divergence~!@#$%^&*()_» или «~!@#$%^&*()_Divergence»
Как сделать чтобы считал все?
$word = "divergence"
$str = InetRead("http://autoit-script.ru/index.php?topic=26002.msg145122#msg145122") ;
$find = StringRegExp(BinaryToString($str, 4), "(?i)S*" & $word & "S*", 3) ;ищем слова
If IsArray($find) And UBound($find) >= 1 Then ;
For $i in $find
FileWriteLine(@ScriptDir & "foundedwords1.txt", $i) ;записываем слова в файл foundedwords.txt
Next
EndIf
Alofa
Гость
-
#7
OffTopic:
#include <IE.au3>
#include <Array.au3>
$oIE = _IECreate('http://autoit-script.ru/index.php?topic=26002.0', 0, 0)
$sText = _IEBodyReadText($oIE) ; Читает содержимое HTML, без тегов.
_IEQuit($oIE)
$sWord = 'divergence'
$aFind = StringRegExp($sText, '(?i)' & $sWord, 3) ;ищем слова
_ArrayDisplay($aFind)
Anna сказал(а):
… в общем всё что не отделено пробелом от «divergence»…
Прошу прощения за невнимательность.
-
#8
Alofa
Вероятно я не правильно выразилась.
скрипт находит и пишет в файл всё как мне нужно
"Divergence".
"WPR_Divergence.mq4",
"RSI_Divergence_v2"
"divergence"
должно быть ещё словечко «Divergence~!@#$%^&*()_» после WPR_Divergence.mq4
-
#9
Вот в этом сообщении оно есть
Anna сказал(а):
Слово необязательно должно начинаться на «Divergence». Возможные варианты: «WPR_Divergence.mq4», «Divergence~!@#$%^&*()_» «RSI_Divergence_v2».
-
#10
Anna [?]
не видит «Divergence~!@#$%^&*()_» или «~!@#$%^&*()_Divergence»
InetRead скачивает страницу для незарегистрированного пользователя. К тому же на странице есть скрипты. В результате страница выглядит так (см. вложение). Поэтому и не находит.
-
scr.png
4.4 КБ · Просмотры: 13
-
#11
InnI [?]
Что же делать? Нельзя ли добавить условие: если встретился [email protected] то заменить на значок «@»
-
#12
Anna [?]
Вы собираетесь искать слова на этом форуме или на forexfactory.com?
Поймите, что код страницы и то, что отображает браузер — это совсем не одно и то же. Если вам нужно обрабатывать результаты работы браузера, то нужно загружать страницу в браузер и получать содержимое страницы из браузера. Alofa сделал для вас пример — пользуйтесь. Если нужен поиск между пробелами, то скопируйте шаблон RegExp из моего скрипта.
-
#13
InnI
Искать буду на forexfactory.com, но в чём разница?
InnI [?]
Если вам нужно обрабатывать результаты работы браузера
Способ не имеет значения, главное посчитать все возможные варианты сочетаний символов с искомым словом.
Работает неоправданно медленно.
-
#14
Anna [?]
В коде страниц.
Вы ошибаетесь. Современные страницы — это не только html-разметка, но и скрипты. Браузер, фактически, является интерпретатором: читает, разбирает, выполняет и выводит результат. Код страницы может содержать всего одну ссылку на скрипт, а браузер выполнит этот скрипт и покажет результат. Поэтому, скачав код страницы, вы можете не найти нужных данных, а получив результат работы браузера — найдёте всё необходимое.
Работает неоправданно медленно
Sleep(1000) уберите — будет на [количество_ссылок] секунд быстрее
И в последней строке опечатка — вместо $hFile нужно $oFile
-
#15
InnI, спасибо , а то что на каждом проходе _IECreate потом _IEQuit замедляет? Не будет быстрее если уже выполнили _IECreate, то сделать _IEnavigte?
-
#16
Anna [?]
Не будет быстрее если уже выполнили _IECreate, то сделать _IEnavigte?
Зачем спрашивать? Попробуйте и узнаете. Заодно нам расскажете.
-
#17
InnI, если все мои идеи и предположения проверять на практике, жизни не хватит Теоретически, перейти по ссылке быстрее, чем создавать объект, но теория зачастую не совпадает с тем что выходит на практике. Вы то уж точно знаете как оно всё там, внутри Windows, работает и что быстрее сделает
-
#18
Как искать 2 слова за один проход?
Добавлено:
Сообщение автоматически объединено: 20 Авг 2018
InnI [?]
_IENavigate быстрее
-
#19
Anna [?]
"(?i)S*(?:" & $sWord & "|" & $sWord_1 & ")S*"
Только в вашем коде она не работает, т.к. _IEQuit уничтожает объект.
-
#20
InnI
Спасибо.
InnI [?]
Только в вашем коде она не работает, т.к. _IEQuit уничтожает объект.
А если так
If IsObj($oIE) Then
_IENavigate($oIE, $oURL)
Else
$oIE = _IECreate($oURL, 0, 0)
EndIf
$sText = _IEBodyReadText($oIE) ;
;_IEQuit($oIE)
то когда уничтожать?
Shandrik
-
#1
Дали задание сделать в Web-е продвинутый поиск — чтобы и однокоренные слова искал — в других падежах, числах, склонениях, спряжениях и т.п. Наверняка и синонимам обрадуются.
Понятно, что такое задание не для на 2-4 человекамесяца, как видится заказчику, но может у Яндексов, Гуглов и Промтов есть открытые готовые решения, которые можно прикрутить к лотусовой базе?
-
#2
Знаю, что есть такая штука
Ссылка скрыта от гостей
, но возможно ли её прикрутить к Lotus Notes, да ещё с падежами и склонениями, я не в курсе. Надо смотреть.
Вот ещё
Ссылка скрыта от гостей
Последнее редактирование модератором: 03.11.2015
-
#3
ну так это для каждого слова всего лишь нужна необходимая база, и каждый из поисковиков держит такую базу в секрете
Чего только простой SEO стоит, когда на слово «автомобиль» должно искать и «тачка», «мафынка» и т.д.
Создаёшь базку за пару дней и дальше просишь её набить
-
#5
Набить
Ага…
Круто! Сам набивал?
-
#6
Набить
Ага…
я сказал БАЗА для каждого слова а не 5-7 вариантов
-
#7
Тут можно спорить о базах, вариантах и прочем бесконечно. По теме топика человека попросили написать семантическое ядро Гугла или Яндекса незадорого, имхо. Картинка не моя. Это известный мем в инторнетах о великом и могучем Русском языке.
-
#8
Набить
Ага…
а самое прикольное в том что и это еще не всё)) там еще пару страниц можно с конем «бег» написать.. типа — ПРОбегал, ПЕРЕбегал, НАбегал.. и т.д.))
admigator
-
#9
Посмотрите в сторону поисковиков типа IBM Content Analytics или IBM Omnifind. Там есть все что вы перечислили плюс можно под веб интегрировать без проблем. Если надо более детально — пишите в личку, подскажу.
-
#10
а самое прикольное в том что и это еще не всё)) там еще пару страниц можно с конем «бег» написать.. типа — ПРОбегал, ПЕРЕбегал, НАбегал.. и т.д.))
так это не семантика
а где «накрутил», «намотал», «отжёг»?
-
#11
@ToxaRat, скажем так — и это всё не считая еще и возможных вариаций семантики)))
-
#12
я за ТС переживаю, справится ли он с заданием
Вот думаю, может тоже кому-то такое задание выдать
roblemo:
Shandrik
-
#13
Не, я объяснил менеджеру проекта, что заказчик не прав.
В Notesregistration купаюсь безвылазно — не до семантики.
lmike
нет, пердело совершенство
Lotus Team
-
#14
задача может иметь разные решения
Ссылка скрыта от гостей
однозначно — яндекс или гугл вариант не получится
Shandrik
-
#15
задача может иметь разные решения
Ссылка скрыта от гостей
однозначно — яндекс или гугл вариант не получится
![]()
Ссылка скрыта от гостей
— ЭТО ОНО!!! Вот спасибо! Если купят, то прикручу.
На пеньке сидит маленький рыжий зверек. У зверька пушистый хвост. Это белочка. Она грызет зубками еловую шишку. Медвежонку понравился зверек. Он подбежал и хотел поиграть с белочкой. Белка испугалась и стрелой взлетела на ель.
1 ответ
admin Админ. ответил 6 лет назад
Прежде всего, выпишем группы слов, которые могут быть однокоренными:
- зверек, зверька, зверек
- белочка, белочкой, белка
- ель, еловую
Далее перейдем к анализу каждой группы.
Первую группу: зверек, зверька, зверек можно сократить до двух слов: зверек и зверька. По сути, это одно и тоже слово в разных формах. Соответственно данные слова не являются однокоренными.
Вторая группа: белочка, белочкой, белка. В этой группе слова: белочка и белочкой — это одно слово в разных формах, поэтому сократим данную группу до двух слов белочка и белка. Эти два слова являются однокоренными.
Третья группа: ель и еловую также являются однокоренными словами.
Таким образом, в представленном тексте однокоренными словами являются: белочка и белка, а также слова: ель и еловую.