Forum Webscript.Ru
Программирование => Perl => Тема начата: kaska от 28 Ноября 2005, 16:19:19
-
представляете, приходит значит такая переменная $something = "И Маши И Саша да еще Олечка тут";
И куда мне такое? Нет, я конечно могу просто отбросить "и", "да", "еще", "тут", чтобы получить "Маша Саша Олечка"... а вдруг что другое в следущий раз прийдёт? ;)
написал бы
$something =~ s/и//gi;
$something =~ s/да//gi;
$something =~ s/еще//gi;
$something =~ s/тут//gi;
- да и дело с концом, получаю
$something = "Маша Саша Олечка";
но решил подумать о будущем... Может быть можно просто удалят все слова меньше либо равных 3-м символам?
-
kaska
для какой цели ты собираешся удалять "и", "да", "еще", "тут" ?
-
Ну если тебе нужно из общего текста вынуть все союзы и прочее что тебе мешает... то можем селть фаилик... где будут перечислены слова исключения или союзы и т д
Потом скрипт открывает этот фаил.... загоняет его в Массив....
Дальше пробираемся по массиву.. исключая эти слова из текста
Так делать ненадо
-
Regestor
садись два...
-
commander
Ждем совета от ботана =)
-
commander
мне нужны только имена, а подобные союзы т.п. нечесть не нужна - поэтому их хочу отбросить.
-
kaska
Поправлю себя... неделай как я говорил выше....
Поверь мне союзов не так ужь и много....
Поэтому не грех будет прямо в код мутить и такое
$something =~ s/и//gi;
$something =~ s/да//gi;
$something =~ s/еще//gi;
$something =~ s/тут//gi;
Если тебе нехочется загромождать свой код строчками 20-30 или более... и хочется чтобы там была 1 строчка заместо этого всего есть 2 выхода....
1) Вынести все это дело в отдельный фаил и подключить в этом месте require ом.... или чем нить еще... чем нравиться... так как некоторые думаю что require использовать нецелесообразно.... решать тебе короче....
2) Или создать отельную функцию... куда ты будешь передавать текст и получать уже обработанный...
Опять-же решать тебе =)
-
Regestor
двойка в дневник... родителей в школу....
kaska
ВАЖНО!
повторяю свой вопрос для чего это тебе?
т.е. если исходя из задачи, тебе нужно удалять слишком часто встречающиеся слова, в каком то массиве данных, тебе нужно сначала их определить, и не обязательно это будут только союзы, предлоги, местоимения и т.д. если тематика массива данных допустим молодежный форум, то в такие слова нужно включить так же слово "типа" ибо это будет просто слово паразит, а если это форум батанического сада, то слово "тип" тут уже преобретает совершенно другой характер... вносить руками все отбрасываемые слова это не правильно... т.е. нужно построить алгоритм вычленения "ненужный слов".
вот почему важно что-бы ты полностью описал задачу....
-
Это для использования в детском садике (только не смейтесь) .:rolleyes: Отбросить нужно только союзы, предлоги, местоимения, т.е. слова не более 3-х символов
-
kaska
с учетом словоформ?
+ как ты собираешся поступать с "не" и "ни" ?
-
Кроме всего прочего, есть имена на две и три буквы, убирая все что не больше трех, ты рискуешь вместе с водой выплеснуть младенца.
Вообще, в таких случаях заводится хеш стоп-слов (заранее заданных). Далее тебе будет легко определить полезное от бесполезного.
-
Проанализировав имена, которые есть, ито, что может быть "не нужно" могу сказать со 100% уверенностью, что отбрасывать нужно именно слова состоящие из одной буквы, двух и трёх букв.
-
$something =~ s/(\\b\\w{0,3}\\b)//g
-
Спасибо большое! А не подскажите мануал на русском в сети хороший?
-
NeoNox
Вообще, в таких случаях заводится хеш стоп-слов (заранее заданных). Далее тебе будет легко определить полезное от бесполезного.
вообще в таких случаях считают "вес слова" в тексте... и особо не напрягаються... ;)
-
commander я не уверен, что здесь нужно употреблять алгоритм "веса слова в тексте". Если ты уверен в своей правоте, будь так любезен, опиши его хотя-бы схематически.
kaska
мануал чего?
-
NeoNox
стандартный tf-idf....
http://instruct.uwo.ca/gplis/601/week3/tfidf.html
-
И что это даст в строке "И Маши И Саша да еще Олечка тут"?
-
NeoNox
как ты думаешь для чего нужен разбор слов из запроса?
и выбрасывание из неё союзов, предлогов, местоимений....
хотя все это флэйм... особенно после того как автор поста остался довольным ответами... :)
-
Нет, мне интересно понять твою мысль...
Выброси союзы здесь "И Маши И Саша да еще Олечка тут Яша и Ян еще"
-
NeoNox
мануал по подобным вещам в Perl
-
kaska это регулярные выражения (regexp).
http://perldoc.narod.ru/