Что нового

Как посчитать однокоренные слова, на страницах сайта?

Anna

Новичок
Сообщения
119
Репутация
2
Здравствуйте.
Хочу узнать сколько раз на страницах сайта, встречаются слова с корнем - дом, домовой...
Слово необязательно должно быть корнем.
Например, на сайте https://www.forexfactory.com/ посчитать сколько раз встречаются слова содержащие "divergence" если больше чем N раз то сохранить их в файл, каждое с новой строки. Можно сразу сохранять в файл, потом посчитаю.
Сохранить нужно все слова - "divergence", "divergence_rsi" или "macd-divergence", в общем всё что не отделено пробелом от "divergence".
Как действовать?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Слова 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
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
hedji
Спасибо, однако считает только на первой странице. Как посчитать на всех страницах сайта?


Добавлено:
Сообщение автоматически объединено:

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

Anna

Новичок
Сообщения
119
Репутация
2
Собираю сторонним софтом ссылки в файл. Из скрипта читаю и перехожу по ним.
Но как сделать чтобы сохранялись слова перед которыми есть символы например ищу "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)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$word = "pai"
$find = StringRegExp(BinaryToString($str, 4), "(?i)\S*" & $word & "\S*", 3) ;ищем слова
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
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
 
A

Alofa

Гость
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"...
Прошу прощения за невнимательность.
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Alofa
Вероятно я не правильно выразилась.
скрипт находит и пишет в файл всё как мне нужно
Код:
&quot;Divergence&quot;.
&quot;WPR_Divergence.mq4&quot;,
&quot;RSI_Divergence_v2&quot;
&quot;divergence&quot;
должно быть ещё словечко "Divergence~!@#$%^&*()_" после WPR_Divergence.mq4
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Вот в этом сообщении оно есть :smile:
Anna сказал(а):
Слово необязательно должно начинаться на "Divergence". Возможные варианты: "WPR_Divergence.mq4", "Divergence~!@#$%^&*()_" "RSI_Divergence_v2".
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Anna [?]
не видит "Divergence~!@#$%^&*()_" или "~!@#$%^&*()_Divergence"
InetRead скачивает страницу для незарегистрированного пользователя. К тому же на странице есть скрипты. В результате страница выглядит так (см. вложение). Поэтому и не находит.
 

Вложения

  • scr.png
    scr.png
    4.4 КБ · Просмотры: 13

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Anna [?]
заменить на значок "@"
Вы собираетесь искать слова на этом форуме или на forexfactory.com? ;)

Поймите, что код страницы и то, что отображает браузер - это совсем не одно и то же. Если вам нужно обрабатывать результаты работы браузера, то нужно загружать страницу в браузер и получать содержимое страницы из браузера. Alofa сделал для вас пример - пользуйтесь. Если нужен поиск между пробелами, то скопируйте шаблон RegExp из моего скрипта.
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
InnI
Искать буду на forexfactory.com, но в чём разница?
InnI [?]
Если вам нужно обрабатывать результаты работы браузера
Способ не имеет значения, главное посчитать все возможные варианты сочетаний символов с искомым словом.

Работает неоправданно медленно.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Anna [?]
В коде страниц.

Способ не имеет значения
Вы ошибаетесь. Современные страницы - это не только html-разметка, но и скрипты. Браузер, фактически, является интерпретатором: читает, разбирает, выполняет и выводит результат. Код страницы может содержать всего одну ссылку на скрипт, а браузер выполнит этот скрипт и покажет результат. Поэтому, скачав код страницы, вы можете не найти нужных данных, а получив результат работы браузера - найдёте всё необходимое.

Работает неоправданно медленно
Sleep(1000) уберите - будет на [количество_ссылок] секунд быстрее ;)

И в последней строке опечатка - вместо $hFile нужно $oFile
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
InnI, спасибо :smile:, а то что на каждом проходе _IECreate потом _IEQuit замедляет? Не будет быстрее если уже выполнили _IECreate, то сделать _IEnavigte?
 
Автор
A

Anna

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

Anna

Новичок
Сообщения
119
Репутация
2
InnI
Спасибо.
InnI [?]
Только в вашем коде она не работает, т.к. _IEQuit уничтожает объект.
А если так
Код:
If IsObj($oIE) Then
  _IENavigate($oIE, $oURL)
Else
  $oIE = _IECreate($oURL, 0, 0)
EndIf
$sText = _IEBodyReadText($oIE) ;
;_IEQuit($oIE)

то когда уничтожать?
 
Верх