Hledání - logické operátory pro vyhledávaná slova
Posted: 19 Jan 2008, 01:02
Dobrý den,
v anglické části fóra uživatel timmy2 přichází s nápadem umožnit hledat složky neobsahující určité soubory. Toto mne insirovalo k tomuto příspěvku, když jsem nedávno řešil několik úloh:
1) Najít všechny soubory, které neobsahují daný text
2) Najít všechny soubory, které obsahují text "A" a text "B"
3) Najít všechny soubory, které obsahují "A" nebo "B"
4) Najít všechny soubory, které obsahují "A" ale ne "B"
(body 1 a 4 se týkaly vyhledání souborů, které je potřeba aktualizovat a tudíž neobsahují nejnovější řetězce)
Body 2 a 3 lze obejít použitím regulárních výrazů (u 2 třeba myslet na obě možná pořadí slov v souboru) a pravděpodobne by šel pomocí regulárních výrazů vyřešit i bod 4. Na bod 1 si pomocí regulárních výrazů již netroufnu a tak si troufám navrhnout do Hledání implementovat základní výrazovou logiku: AND, OR a NOT (případně ještě se závorkami).
BTW: hledání lze opakovat a skládat (AND/OR/AND NOT) dohromady, čímž pravděpodobně ve dvojnásobném čase a s několikanásobným usílím dosáhneme stejného výsledku. Pokud ve výrazové logice povolíme závorky, opakovaným hledáním již nebude možné úlohu řešit.
Zadáním: kočka OR pes AND NOT morče by byly nalezeny všechny soubory, které obsahují zmínku o kočce nebo psu, ale bez zmínky o morčeti.
Pro vyhledání souborů bez určitého textu by se zadalo: NOT text
Pokud je třeba zadat text s mezerou, je možné použít uvozovky: kočka AND NOT "siamská kočka" - všechny soubory o kočkách, ale ne siamských kočkách
Možné rozšíření:
- kombinace regulárních výrazů a logických operátorů ("(19|20)[0-9]{2}" AND NOT 2008 - hledá roky od 1900 do 2099 bez 2008)
- operátor NEAR, který by hledal text "A" blízko slova "B". Blízko = jen několik slov okolo slova B (případně žádné slovo, ale jen bílé znaky a interpunkční znaménka). Výrazu siamská NEAR kočka by tedy odpovídalo spojení siamská modrá kočka ale ne spojení: Siamská vláda odsouhlasila důležitý zákon. Kočka se tak stala národním zvířetem.
Možné problémy:
- "siamská kočka" AND NOT kočka by nevyhledalo žádné soubory
v anglické části fóra uživatel timmy2 přichází s nápadem umožnit hledat složky neobsahující určité soubory. Toto mne insirovalo k tomuto příspěvku, když jsem nedávno řešil několik úloh:
1) Najít všechny soubory, které neobsahují daný text
2) Najít všechny soubory, které obsahují text "A" a text "B"
3) Najít všechny soubory, které obsahují "A" nebo "B"
4) Najít všechny soubory, které obsahují "A" ale ne "B"
(body 1 a 4 se týkaly vyhledání souborů, které je potřeba aktualizovat a tudíž neobsahují nejnovější řetězce)
Body 2 a 3 lze obejít použitím regulárních výrazů (u 2 třeba myslet na obě možná pořadí slov v souboru) a pravděpodobne by šel pomocí regulárních výrazů vyřešit i bod 4. Na bod 1 si pomocí regulárních výrazů již netroufnu a tak si troufám navrhnout do Hledání implementovat základní výrazovou logiku: AND, OR a NOT (případně ještě se závorkami).
BTW: hledání lze opakovat a skládat (AND/OR/AND NOT) dohromady, čímž pravděpodobně ve dvojnásobném čase a s několikanásobným usílím dosáhneme stejného výsledku. Pokud ve výrazové logice povolíme závorky, opakovaným hledáním již nebude možné úlohu řešit.
Zadáním: kočka OR pes AND NOT morče by byly nalezeny všechny soubory, které obsahují zmínku o kočce nebo psu, ale bez zmínky o morčeti.
Pro vyhledání souborů bez určitého textu by se zadalo: NOT text
Pokud je třeba zadat text s mezerou, je možné použít uvozovky: kočka AND NOT "siamská kočka" - všechny soubory o kočkách, ale ne siamských kočkách
Možné rozšíření:
- kombinace regulárních výrazů a logických operátorů ("(19|20)[0-9]{2}" AND NOT 2008 - hledá roky od 1900 do 2099 bez 2008)
- operátor NEAR, který by hledal text "A" blízko slova "B". Blízko = jen několik slov okolo slova B (případně žádné slovo, ale jen bílé znaky a interpunkční znaménka). Výrazu siamská NEAR kočka by tedy odpovídalo spojení siamská modrá kočka ale ne spojení: Siamská vláda odsouhlasila důležitý zákon. Kočka se tak stala národním zvířetem.
Možné problémy:
- "siamská kočka" AND NOT kočka by nevyhledalo žádné soubory