PDA

View Full Version : Text lookup



Elric
08-19-2009, 11:37 PM
у меня имеется ааахрененно большой и запутанный текстовый документ [txt]. мне надо узнать есть ли в етом документе определённые слова которые у меня в отельном документе [excel] в принципе я конечно могу сделать скопировать слово из [excel] и поискать его в тексте...затем скопировать ещё одно слово из [excel] и поискать его в тексте но у меня там порядка 300 слов и зае@усь ето делать вручную. можли как-то сделать так что бы ета самая функция [find] автоматически проверяла слово за словом в списке в [excel], выставляла допустим 1 или 0 в зависмисти от результата и переходила к другому слову в списке...будут какие идеи?

нет, я не могу перенести текстовый документ в [excel] чтобы сделать [vlookup] :(

crazy-mike
08-19-2009, 11:51 PM
Макро для Word-а написать - вариант-1. Конвертировать табличку в CSV и нарисовать что-то маленькое на C - вариант-2. Вариант-2 - просто быстрее.

crazy-mike
08-20-2009, 02:30 AM
Самый прикольный вариант - скомпилировать сканер с библиотекой bison.
:grum:
С программой на C - естественно. Ну это - если вообще "лень напрягаться".

profAleks
08-20-2009, 11:08 AM
"Запихнуть" текст в MySQL и написать запрос. :grum:

crazy-mike
08-20-2009, 11:28 PM
"Запихнуть" текст в MySQL и написать запрос. :grum:
Кстати - далеко не самый "тупой" вариант. :grum:
Только текст перед этим лучше "подготовить". - а это всё равно "один проход" сканера (лексического анализатора). Просто слова надо повыделять (заменить все пробелы и знаки препинания на "разделители слов"). Если в тексте использовались переносы в словах - то "посливать" слова. Тогда в самом деле можно импортировать табличку из одного ключевого поля из текcта. :grum::grum::grum:
Но намного проще в маленькой программе на C с использованием какой-нибудь библиотеки libhash (даже Berkeley DB хватит). :grum:
А выделение слова из текcта - примерно строчек десять:
emptyWord();
while( !EOF ) {
a=getch();
if(a in letters) { pushToWord(a); continue; }
if(WordNotEmpty()) getWord(),emptyWord();
};
if(WordNotEmpty()) getWord();
:grum:
Примерно так. Ну а внутри getWord проверять всю эту муть со встречаемиостью слов. Это в том числе с использованием DBMS можно даже делать.
a in letters - коды букв из слов в латинском алфавите вообще последовательно расположены в ASCII. Даже думать ни о чём не надо. Да и функции из stdlib в этом случае правильно работают.