Как найти однокоренные слова на странице

  • honor8

Как искать однокоренные слов в русских текстах?

Здравствуйте

не получается найти опитимальное решение для поиска однокоренных слов в текстах на русском языке

что пробовал
-алгоритмы стеммирования (библиотеки 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
Вероятно я не правильно выразилась.
скрипт находит и пишет в файл всё как мне нужно

&quot;Divergence&quot;.
&quot;WPR_Divergence.mq4&quot;,
&quot;RSI_Divergence_v2&quot;
&quot;divergence&quot;

должно быть ещё словечко «Divergence~!@#$%^&*()_» после WPR_Divergence.mq4

  • #9

Вот в этом сообщении оно есть :smile:

Anna сказал(а):

Слово необязательно должно начинаться на «Divergence». Возможные варианты: «WPR_Divergence.mq4», «Divergence~!@#$%^&*()_» «RSI_Divergence_v2».

  • #10

Anna [?]

не видит «Divergence~!@#$%^&*()_» или «~!@#$%^&*()_Divergence»

InetRead скачивает страницу для незарегистрированного пользователя. К тому же на странице есть скрипты. В результате страница выглядит так (см. вложение). Поэтому и не находит.

  • scr.png

    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, спасибо :smile:, а то что на каждом проходе _IECreate потом _IEQuit замедляет? Не будет быстрее если уже выполнили _IECreate, то сделать _IEnavigte?

  • #16

Anna [?]

Не будет быстрее если уже выполнили _IECreate, то сделать _IEnavigte?

Зачем спрашивать? Попробуйте и узнаете. Заодно нам расскажете.

  • #17

InnI, если все мои идеи и предположения проверять на практике, жизни не хватит :smile: Теоретически, перейти по ссылке быстрее, чем создавать объект, но теория зачастую не совпадает с тем что выходит на практике. Вы то уж точно знаете как оно всё там, внутри Windows, работает и что быстрее сделает ;)

  • #18

Как искать 2 слова за один проход?

Добавлено:

Сообщение автоматически объединено: 20 Авг 2018


InnI [?]

_IENavigate быстрее :smile:

  • #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 человекамесяца, как видится заказчику, но может у Яндексов, Гуглов и Промтов есть открытые готовые решения, которые можно прикрутить к лотусовой базе?

garrick


  • #2

Знаю, что есть такая штука

Ссылка скрыта от гостей

, но возможно ли её прикрутить к Lotus Notes, да ещё с падежами и склонениями, я не в курсе. Надо смотреть.

Вот ещё

Ссылка скрыта от гостей

Последнее редактирование модератором: 03.11.2015

ToxaRat


  • #3

ну так это для каждого слова всего лишь нужна необходимая база, и каждый из поисковиков держит такую базу в секрете

Чего только простой SEO стоит, когда на слово «автомобиль» должно искать и «тачка», «мафынка» и т.д.

Создаёшь базку за пару дней и дальше просишь её набить ;)

garrick


  • #5

Набить :) Ага…

Круто! Сам набивал?

ToxaRat


  • #6

Набить :) Ага…

zOigfKM6fvw.jpg

я сказал БАЗА для каждого слова а не 5-7 вариантов ;)

NetWood


  • #7

Тут можно спорить о базах, вариантах и прочем бесконечно. По теме топика человека попросили написать семантическое ядро Гугла или Яндекса незадорого, имхо. Картинка не моя. Это известный мем в инторнетах о великом и могучем Русском языке.

  • #8

Набить :) Ага…

zOigfKM6fvw.jpg

а самое прикольное в том что и это еще не всё)) там еще пару страниц можно с конем «бег» написать.. типа — ПРОбегал, ПЕРЕбегал, НАбегал.. и т.д.))

admigator


  • #9

Посмотрите в сторону поисковиков типа IBM Content Analytics или IBM Omnifind. Там есть все что вы перечислили плюс можно под веб интегрировать без проблем. Если надо более детально — пишите в личку, подскажу.

ToxaRat


  • #10

а самое прикольное в том что и это еще не всё)) там еще пару страниц можно с конем «бег» написать.. типа — ПРОбегал, ПЕРЕбегал, НАбегал.. и т.д.))

так это не семантика ;)
а где «накрутил», «намотал», «отжёг»? ;)

  • #11

@ToxaRat, скажем так — и это всё не считая еще и возможных вариаций семантики)))

ToxaRat


  • #12

я за ТС переживаю, справится ли он с заданием

Вот думаю, может тоже кому-то такое задание выдать
:problemo:

Shandrik


  • #13

Не, я объяснил менеджеру проекта, что заказчик не прав. :)
В Notesregistration купаюсь безвылазно — не до семантики.

lmike

lmike

нет, пердело совершенство

Lotus Team


  • #14

задача может иметь разные решения

Ссылка скрыта от гостей

однозначно — яндекс или гугл вариант не получится ;)

Shandrik


  • #15

задача может иметь разные решения

Ссылка скрыта от гостей

однозначно — яндекс или гугл вариант не получится ;)

Ссылка скрыта от гостей

— ЭТО ОНО!!! Вот спасибо! Если купят, то прикручу.

На пеньке сидит маленький рыжий зверек. У зверька пушистый хвост. Это белочка. Она грызет зубками еловую шишку. Медвежонку понравился зверек. Он подбежал и хотел поиграть с белочкой. Белка испугалась и стрелой взлетела на ель.

1 ответ

admin Админ. ответил 6 лет назад

Прежде всего, выпишем группы слов, которые могут быть однокоренными:

  1. зверек, зверька, зверек
  2. белочка, белочкой, белка
  3. ель, еловую

Далее перейдем к анализу каждой группы.
Первую группу: зверек, зверька, зверек можно сократить до двух слов: зверек и зверька. По сути, это одно и тоже слово в разных формах. Соответственно данные слова не являются однокоренными.
Вторая группа: белочка, белочкой, белка. В этой группе слова: белочка и белочкой — это одно слово в разных формах, поэтому сократим данную группу до двух слов белочка и белка. Эти два слова являются однокоренными.
Третья группа: ель и еловую также являются однокоренными словами.
Таким образом, в представленном тексте однокоренными словами являются: белочка и белка, а также слова: ель и еловую.

Понравилась статья? Поделить с друзьями:
  • Как составить рецензию на произведение
  • Как найти нужного человека в россии
  • Как найти наводку в проводке
  • Составить схему управления афинским полисом как избирались должностные лица какие функции выполняли
  • Где найти эффекты как в инстаграм