Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 14.03.11 Prihlásený: 04.07.24 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
Potreboval by som nakopnúť nejakým smerom, potrebujem vyhľadávať v texte ale tak, aby vrátil aj najpravdepodobnejšiu zhodu (nie len exaktnú zhodu...). Máte nejakú predstavu?
|
|
Registrovaný: 11.01.09 Prihlásený: 15.02.25 Príspevky: 1397 Témy: 10 | 10 Bydlisko: Hrinova |
Neviem, ci sa nejaky taky algoritmus nenajde aj v STL ( osobne o takom neviem ), ale da sa na to ist stylom, ze sa budu prehladavat znaky a pocet spravnych znakov sa bude niekde uchovavat. Ak bude dostatocne velky, tak slovo sa bude povazovat za spravne. Narychlo som zbuchal nieco taketo:
Kód: #include <iostream> #include <vector>
using namespace std;
void findStringsWithMatch( string source, string keyword, vector<string> & allMatches ) {
string result; int match, begin;
// posuvame sa v zdrojovom retazci po znaku for ( int i = 0; i < source.length(); i++ ) { match = begin = 0;
// posuvame sa v hladanom retazci po znaku for ( int j = 0; j < keyword.length(); j++ ) { // zistujeme, aka je zhoda na danej pozicii v zdrojovom retazci if ( source[i+j] == keyword[j] ) { ( match == 0 ) ? ( begin = j + i ) : 0 ; match++; } }
// ak je aspon 50% zhoda, uloz/vypis najdeny retazec if ( match > ( keyword.length() / 2 ) ) { result = source.substr( begin, match ); allMatches.push_back( result ); //cout << result << endl; } }
}
int main() {
vector<string> allMatches;
findStringsWithMatch( "V tomto retazci sa bude vyhladavat", "retazec", allMatches ); findStringsWithMatch( "zhod.....hodzhoda....ho...zoda...odazho", "zhoda", allMatches );
for ( vector<string>::iterator i = allMatches.begin(); i != allMatches.end(); i++ ) cout << *i << endl;
return 0;
}
Vypis:
Citácia: retaz zhod hod zhoda oda oda zho
ale samozrejme, ze to este nemusi byt podla vasich predstav. Napriklad, je nutne sa zamysliet, ako konkretne pozadujeme, aby sa vysledny najdeny retazec mal zhodovat s originalom. V tomto priklade sa povazuje za zhodu aj slovo "zhoda" a "oda", pretoze oda tvori viac ako 50% v slove zhoda. Je to ale akysi zaklad, ako by to mohlo vyzerat. Staci uz len doplnit, aby sa vypisalo len to, co je potrebne.
|
|
Registrovaný: 14.03.11 Prihlásený: 04.07.24 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
Ďakujem, idem sa s tým hrať. 8-)
Ja potrebujem hľadať napríklad 5 slov s tým, že nejaké mohlo byť vymazané alebo nejaké vložené medzi.
|
|
Registrovaný: 11.01.09 Prihlásený: 15.02.25 Príspevky: 1397 Témy: 10 | 10 Bydlisko: Hrinova |
V tom pripade by tento kod mal fungovat, uz len zalezi, aky vysledok sa ma vratit, ci cele slovo ( napr ak je slovo "aaaretazecbbb" a ma sa najst slovo "retazec", aky vysledok sa ma vratit ako result ), v tomto priklade to vrati jednoducho len tu cast retazca, ktora sa hladala, ale ako som vravel, uz to snad nie je problem upravit si do pozadovaneho tvaru. Ak by bol problem, staci sa ozvat.
|
|
Registrovaný: 14.03.11 Prihlásený: 04.07.24 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
Ďakujem, zatiaľ to stačí takto.
Potrebujem vyhodnocovať % zhody a keďže sa výsledky môžu opakovať, budem hľadať najlepšiu zhodu v okolí zadaného miesta.
// pridané po 5 minútach od posledného príspevku
Fico píše: V tom pripade by tento kod mal fungovat, uz len zalezi, aky vysledok sa ma vratit, ci cele slovo ( napr ak je slovo "aaaretazecbbb" a ma sa najst slovo "retazec", aky vysledok sa ma vratit ako result ), v tomto priklade to vrati jednoducho len tu cast retazca, ktora sa hladala, ale ako som vravel, uz to snad nie je problem upravit si do pozadovaneho tvaru. Ak by bol problem, staci sa ozvat.
S tým príkladom nie je problém ![:)](https://www.pcforum.sk/images/smilies/smile02.gif) , problém je ma sa najst slovo "retazec", a prehľadávaný text je "aaa retbbb azec" aby do zhody počítal aj druhú časť (t.j. aby sa vedel znovu zosynchronizovať). Keď to vie filecompare a textové editory, nejako sa to musí dať... (Napríklad regulárnymi výrazmi.)
Ale nemôžem si dovoliť veľké delo, musí to byť rýchle. // pridané po 2 hodinách 54 minútach od posledného príspevkuUž som niečo našiel, hľadaqním "sentence similarity measure".
The Levenshtein distance between two strings is defined as the minimum number of edits needed to transform one string into the other, with the allowable edit operations being insertion, deletion, or substitution of a single character.
|
|
Registrovaný: 11.01.09 Prihlásený: 15.02.25 Príspevky: 1397 Témy: 10 | 10 Bydlisko: Hrinova |
Ak chcete pouzit regularne vyrazy, tak aj to sa da, len zial, v linuxe mi akosi nejde pouzit kniznicu regex v C++, tak ak postaci aspon kod v Cecku, s ceckovskou kniznicou regex.h ( ktora je zrejme len v linuxe, nie som si isty ):
Kód: #include <stdio.h> #include <string.h> #include <regex.h>
int findStringInText( char* source, char* keyword ) {
regex_t regex; int i, result, match; char pattern[255];
match = 0; pattern[0] = '\0';
/* vygenerovanie regularneho vyrazu [^ ]*1[^ ]*2[^ ]*3[^ ]* ... atd */ for ( i = 0; i < strlen( keyword ); i++ ) { strcat( pattern, "[^ ]*" ); strncat( pattern, keyword + i, 1 ); } strcat( pattern, "[^ ]*" );
/* zistenie zhody */ result = regcomp( ®ex, pattern, 0 ); if ( result != 0 ) return 0;
result = regexec( ®ex, source, 0, NULL, 0 ); if ( result == 0 ) match = 1;
regfree( ®ex ); return match;
}
int main() {
if ( findStringInText( "aaaretbbbazecccc", "retazec" ) ) printf( "Found it!\n" ); else printf( "No match\n" );
return 0;
}
Vystup:
Citácia: Found it!
|
|
Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Assembler, C, C++, Pascal, Java | 0 | 382 | 18.07.2014 12:24 marian_r | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Ostatné programy | 2 | 384 | 26.01.2012 12:51 Nemesis97 | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Ostatné programy | 0 | 1012 | 13.06.2006 16:52 Pufo Callo | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Assembler, C, C++, Pascal, Java | 7 | 681 | 18.11.2010 15:07 masloslayer | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read_hot.gif) | v Assembler, C, C++, Pascal, Java | 12 | 594 | 29.04.2013 11:41 BX | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Operačné systémy Unix a Linux | 0 | 585 | 30.03.2011 18:01 riki137 | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v PHP, ASP | 4 | 872 | 01.08.2009 21:26 Tominator | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Assembler, C, C++, Pascal, Java | 5 | 804 | 08.07.2014 20:40 XOLOO | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v PHP, ASP | 5 | 522 | 25.04.2013 23:42 misko16 | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Databázy | 1 | 907 | 29.08.2009 11:30 bmatias | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Ostatné programy | 4 | 753 | 30.06.2008 2:38 dedko45 | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v PHP, ASP | 1 | 726 | 24.09.2010 20:22 VireL | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Delphi, Visual Basic | 1 | 816 | 20.07.2009 19:25 Fico | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read_hot.gif) | v HTML, XHTML, XML, CSS | 15 | 2368 | 04.12.2007 13:15 wotan | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Databázy | 3 | 423 | 08.04.2014 9:45 JanoF | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read_hot.gif) | v Správy pre vedenie fóra | 9 | 1096 | 19.04.2012 20:53 Jeffo |
|