The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Поиск фрагментов текста на русском языке."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Поиск фрагментов текста на русском языке." 
Сообщение от dimus emailИскать по авторуВ закладки(??) on 10-Янв-06, 08:18  (MSK)
Для одного исследования требуется искать в различных текстах на русском определенные словосочетания. Люди, которые проводят эти исследования, очень далеки от компьютеров и искали такие словосочетания вручную. Когда я узнал об этом - я ужаснулся напрасно потраченным здоровью и усилиям и тут же вспомнил о программе grep. Быстрое тестирование под линуксом показало, что grep прекрасно справляется с поставленной задачей. Но упомянутые выше люди имеют очень смутное представление о компьютерах вообще, а их знания о юникс подобных системах равны нулю, тоесть использование для этих целей линукса или любой другой юникс-подобной ОС отпадает. Таким образом, требуется средство поиска под виндовс. Зная, что многие полезные утилиты были туда портированы, я бросился искать виндовый grep и нашел его на sourceforge. Однако каково было мое удивление и разочарование, когда он не захотел выполнять поиск русских букв! grep.exe от компилятора Borland C также не захотел это делать.

Вопросы:
1. Почему grep под линукс ищет русские буквы, а grep под виндовс не ищет и есть ли способ заставить его их искать?
2. Какими еще программами можно воспользоваться для поиска словосочетаний - требуется возможность поиска по части слова, обработка неизвестного количества пробелов и знаков препинания между словами.

Заранее спасибо.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "Поиск фрагментов текста на русском языке." 
Сообщение от cybersun emailИскать по авторуВ закладки on 10-Янв-06, 11:52  (MSK)
>Для одного исследования требуется искать в различных текстах на русском определенные словосочетания.
>Люди, которые проводят эти исследования, очень далеки от компьютеров и искали
>такие словосочетания вручную. Когда я узнал об этом - я ужаснулся
>напрасно потраченным здоровью и усилиям и тут же вспомнил о программе
>grep. Быстрое тестирование под линуксом показало, что grep прекрасно справляется с
>поставленной задачей. Но упомянутые выше люди имеют очень смутное представление о
>компьютерах вообще, а их знания о юникс подобных системах равны нулю,
>тоесть использование для этих целей линукса или любой другой юникс-подобной ОС
>отпадает. Таким образом, требуется средство поиска под виндовс. Зная, что многие
>полезные утилиты были туда портированы, я бросился искать виндовый grep и
>нашел его на sourceforge. Однако каково было мое удивление и разочарование,
>когда он не захотел выполнять поиск русских букв! grep.exe от компилятора
>Borland C также не захотел это делать.
>
>Вопросы:
>1. Почему grep под линукс ищет русские буквы, а grep под виндовс
>не ищет и есть ли способ заставить его их искать?
>2. Какими еще программами можно воспользоваться для поиска словосочетаний - требуется возможность
>поиска по части слова, обработка неизвестного количества пробелов и знаков препинания
>между словами.
>
>Заранее спасибо.


Perl... Читать аргументы командки, открыть файл, до конца в цикле построчно читать и искать в строке словосочетание и вывести строку на экран, если совпадение найдено, закрыть файл.

Самое простое. Не беру в расчет расстановку переносов в документах и другие хитрости...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Поиск фрагментов текста на русском языке." 
Сообщение от dimus Искать по авторуВ закладки(??) on 10-Янв-06, 12:03  (MSK)
Идея неплохая, однако в данном случае она неприемлима. Нужна готовая программа. Ведь сказал же, что люди не разбираются в компьютерах. И написать такую прогу они, соответственно, не смогут. А я сам с перлом не дружу - предпочитаю С/С++ и ассемблер. По идее все, что надо - это нормальный grep, понимающий русский язык.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Поиск фрагментов текста на русском языке." 
Сообщение от lavr emailИскать по авторуВ закладки on 10-Янв-06, 12:23  (MSK)
>Идея неплохая, однако в данном случае она неприемлима. Нужна готовая программа. Ведь
>сказал же, что люди не разбираются в компьютерах. И написать такую
>прогу они, соответственно, не смогут. А я сам с перлом не
>дружу - предпочитаю С/С++ и ассемблер. По идее все, что надо
>- это нормальный grep, понимающий русский язык.

не знаю откуда и какие grep'ы вы пробовали, но grep из cygwin
нормально работал с локализацией.

Кроме того можно попробовать:

http://www.interlog.com/~tcharron/grep.html
http://gnuwin32.sourceforge.net/packages/grep.htm - тут все что нужно есть

у обоих доступны sources, так что нет проблем посмотреть

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Поиск фрагментов текста на русском языке." 
Сообщение от dimus emailИскать по авторуВ закладки(??) on 10-Янв-06, 12:32  (MSK)

>не знаю откуда и какие grep'ы вы пробовали, но grep из cygwin
>
>нормально работал с локализацией.
Я вообще-то написал, откуда и какие...

>
>Кроме того можно попробовать:
>
>http://www.interlog.com/~tcharron/grep.html
>http://gnuwin32.sourceforge.net/packages/grep.htm - тут все что нужно есть
>
>у обоих доступны sources, так что нет проблем посмотреть

Да, проблем посмотреть исходники нет, но дело в том, что чтобы вносить в них какие-то изменения надо потратить много времени на то, чтобы понять, как все работает, а я это не могу себе сейчас позволить.

Я пробовал как раз gnu grep from sourceforge. И он не заработал.
Хочу сейчас попробовать с интерлога. Насчет cygwin - спасибо за подсказку.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Поиск фрагментов текста на русском языке." 
Сообщение от Skif Искать по авторуВ закладки(ok) on 10-Янв-06, 13:34  (MSK)
#!C:\perl\bin\perl.exe

my @arg = @ARGV;

my $file = $arg[0];
$arg[0]='';
my $str = '';

foreach my $s (@arg) {
  $str="$str $s";
}

open (F,"<$file") || die "Can not open file!\n Exit\n";
while (<F>){
  if ($_ =~ m/$str/gi ) {
     print $_;
  }
}
close(F);

exit(0);

Это так, на вскидку. Первый аргумент - путь к файлу. Читает только прочтые txt-шники. Ищет только жестко заданную фразу. За большим - звыняйте, бананив не мае... Тем паче на шару.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Поиск фрагментов текста на русском языке." 
Сообщение от co6aka Искать по авторуВ закладки(ok) on 10-Янв-06, 15:04  (MSK)
http://www.computerra.ru/hitech/36343/
в частности "google desktop search"
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Поиск фрагментов текста на русском языке." 
Сообщение от dimus Искать по авторуВ закладки(??) on 10-Янв-06, 15:28  (MSK)
>http://www.computerra.ru/hitech/36343/
>в частности "google desktop search"

COOL!
Я даже и не думал в этом направлении! А ведь это похоже именно то, что доктор прописал! Будем тестировать! Спасибо за наводку!

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Поиск фрагментов текста на русском языке." 
Сообщение от dimus Искать по авторуВ закладки(??) on 10-Янв-06, 15:41  (MSK)
Хммм...
А интересно, сможет эта программа выдать не только документ, где встречается нужное словосочетание, но и Сколько и В Каком Месте оно встречается?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Поиск фрагментов текста на русском языке." 
Сообщение от dimus emailИскать по авторуВ закладки(??) on 11-Янв-06, 09:04  (MSK)
Я разобрался, почему под Вин grep не искал русские буквы. Дело оказалось в различных кодировках, за что можно сказать большое спасибо Мелкософту.

Пример запуска из консоли cmd:
C:\GnuWin32\bin>grep глубина deepness.txt

Текст deepness.txt (Классный роман В.Винджа "Глубина в небе") содержит много включений слова "глубина". Так вот, если текст находится в естественной для консоли CP866, то поиск не дает результатов. Если же перекодировать текст в ANSI1251, то поиск дает результат, однако так как это не консольная кодировка, то на выходе мы получаем набор кракозябр :) Естественным решением проблемы будет перенаправление результата в файл, который потом можно обрабатывать:
C:\GnuWin32\bin>grep глубина deepness.txt > result.txt

Запуск обычных консольных программ с русскими параметрами в командной строке показывает очень интересный эффект. Вот пример программы:

#include <stdio.h>

int main( int argc, char* argv[] )
{
if( argc > 1 )
{
printf("%s\n", argv[1] );
}

return 0;
}

Я скомпилировал ее как программу ДОС и как консольное приложение Виндовс (компилятор OpenWatcom 1.3). Запуск: test привет

DOS версия: привет
Win версия: яЁштхЄ

Весьма забавный результат, который однако должны принимать во внимание все люди, занимающиеся созданием кроссплатформенных программ. Вообще для меня остается загадкой, ЗАЧЕМ перекодировать параметры командной строки из родной кодировки в неродную. Интересно также, это косяк Винды или это компилятор постарался? Думаю, что для обхода этого косяка надо добавлять в кроссплатформенные консольные программы специальный ключ для перекодировки параметров командной строки  ANSI->OEM

Спасибо еще раз всем за ответы.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру