Txt tartalom szétválogatása kifejezések alapján: hogyan?
Van egy jó nagy .txt szövegem, amiben soronként egy-egy mondat szerepel.
Szeretném adott szavak, kifejezések szerint szétválogatni a mondatokat, azaz amelyik mondatokban szerepel a pl. a "arany cipócska" kifejezés azok a mondatok kerüljenek át egy 1.txt-be, amikben a "szép erdő", azok a 2.txt-be, amikben a "rossz szomszéd", azok a 3.txt-be, stb. (persze a txt fájlok- neve lehet más is)
Hogy lehetne ezt megoldani egyszerűen szerintetek? Én arra gondoltam, hogy beteszem valamiféle adatbázisba, és onnan keresem ki ezeket, és átmásolgatom txt-be külön a találati listát, de ez ugye nem automata, mert kb 1000 felé szeretném szétválogatni az eredeti szöveget...
Tudtok rá valami jó megoldást?
re: Txt tartalom szétválogatása kifejezések alapján: hogyan?
Én kétféle megoldással tudnám megoldani.
1. Adatbázis eltárolod a mondatokat, majd a keresési eredményt simán berakod egy tömmbe és kiíratod egy txt-be, php-val. (fopen,fwrite,fclose).
2. A mondatokat berakod egy tömbe és az alapján keresel rá, hogy az adott szöveg szerepel-e benne. Most hirtelen mint az in_array vagy az array_search erre jó. Az eredményt pedig szintén txt-be íratom.
Én az elsőt használnám, akár lehet neki egy aki admint is csinálni ahova a későbbi txt-ket fel lehet importálni stb..
re: Txt tartalom szétválogatása kifejezések alapján: hogyan?
Nincs tesztelve, de innen elindulhatsz :D
PHP kód:
$kws=file("keresett_szavak.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$szov=file("nagy.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$kws=array_unique($kws);
$szov=array_unique($szov);
$n=0;
foreach($kws as $kw){
$n++;
$outp="";
foreach($szov as $sor)if (mb_stripos($sor,$kw)!==false)$outp.=$sor."\r\n";
if ($outp) file_put_contents($kw.".txt",$outp); // Ha számos fájlnevet szeretnél, $kw -t cserél $n -re
}
re: Txt tartalom szétválogatása kifejezések alapján: hogyan?
Éééés működik és működik és működik... hihetetlen vagy Benedictus :)
Teljesen jó, amit csinál...
re: Txt tartalom szétválogatása kifejezések alapján: hogyan?
grep
Linuxon alapból van
Windowson Cygwin
Kód:
[input.txt]
Van egy jó nagy .txt szövegem
kerüljenek át egy 1.txt-be, amikben
de ez ugye nem automata, mert kb 1000 felé szeretném
Tudtok rá valami jó megoldást?
$ cat input.txt | grep 'txt' > output.txt
[output.txt]
Van egy jó nagy .txt szövegem
kerüljenek át egy 1.txt-be, amikben
re: Txt tartalom szétválogatása kifejezések alapján: hogyan?
Idézet:
benedictus eredeti hozzászólása
Nincs tesztelve, de innen elindulhatsz :D
PHP kód:
$kws=file("keresett_szavak.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$szov=file("nagy.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$kws=array_unique($kws);
$szov=array_unique($szov);
$n=0;
foreach($kws as $kw){
$n++;
$outp="";
foreach($szov as $sor)if (mb_stripos($sor,$kw)!==false)$outp.=$sor."\r\n";
if ($outp) file_put_contents($kw.".txt",$outp); // Ha számos fájlnevet szeretnél, $kw -t cserél $n -re
}
Azt bele lehet valahogy mahinálni a kódba, hogy az adott keresett szó benne legyen az első sorban a hozzá tartozó doksiban?
A számos megoldást használnám, és a tartalomban így látni lehetne, hogy ez most mi is éppen... :)
re: Txt tartalom szétválogatása kifejezések alapján: hogyan?
Update: sikerült megoldani:
ehelyett:
ez kellett bele:
PHP kód:
$outp=($kw."\r\n");
:)
re: Txt tartalom szétválogatása kifejezések alapján: hogyan?
Ezzel most nem leszel kisegítve, de effajta szövegfeldolgozásra én Apache SolR-t használok.
Döbbenetesen jó cucc, alkalmas szövegfeldolgozásra, sztemmelésre, keresésre, facet-alapú szűrésre, és még nagyon sokmindenre.
Igaz, hogy ráment két hónapom mire megtanultam rendesen használni, de azóta kereséshez, szövegfeldogozáshoz szóba sem jöhet más.
Még mindig ki vagyok akadva tőle, mennyire eltalálták - bármire, amire eddig szükségem volt (egyetlen nyakatekert elképzelésemtől eltekintve) out-of-the-box tudta.
Mindezt ingyen, open source, és fasorba nincs hozzá képest pl. az MSSQL FTS, amivel éveken át szenvedtem korábban.
Bocs, ez kikívánkozott most belőlem :)
Üdv, Luxi