|
Programiranje Java, Perl, VB, ASP, .NET, C, C++, Pascal, Delphi Sponzor:
![]() |
![]() |
|
Alati teme | Način prikaza |
|
![]() |
#1 |
nedovoljno naspavan
Na probnom radu
Datum učlanjenja: 25.03.2011
Poruke: 21
Hvala: 7
1 "Hvala" u 1 poruci
![]() |
![]() Problem je sledeći:
Hoću da "uzmem" sve "unikatne" reči iz teksta i izračunam koliko puta se pojavljuju u istom. Iskopirao sam neke naše poslovice (ćiriličnim slovima pisane) i sačuvao sa notepad-om kao UTF8 fajl. Onda sam priključio UTF8 biblioteku (od autora "Dragi Tata" koji je član ovog foruma, ne mogu sad da nađem pravo ime i prezime ![]() (win7, VS 2010 C++) Kôd:
#include <iostream> #include <fstream> #include <string> #include <sstream> #include <vector> #include <set> #include <map> #include <regex> #include <limits> #include <locale> #include "utf8.h" int main() { try { std::ifstream in_file("file.txt"); std::vector<std::wstring> v_utf16_lines; std::string line; while(std::getline(in_file, line)) { std::wstring utf16line; utf8::utf8to16(line.begin(), line.end(), std::back_inserter(utf16line)); v_utf16_lines.push_back(utf16line); } in_file.close(); //std::wregex::flag_type reg_flags = std::regex_constants::ECMAScript; std::set<std::wstring> s_words; for(std::size_t i = 0; i < v_utf16_lines.size(); ++i) { std::wregex pattern(L"\\b[\\p{L}]+\\b"); const std::wsregex_token_iterator end; std::wsregex_token_iterator ti(v_utf16_lines[i].begin(), v_utf16_lines[i].end(), pattern); for(; ti != end; ++ti) { s_words.insert(*ti); } } std::string out_str; std::set<std::wstring>::iterator send = s_words.end(); std::set<std::wstring>::iterator sit = s_words.begin(); for(; sit != send; ++sit) { std::size_t w_freq = 0; std::wregex pattern(L"\\b" + (*sit) + L"\\b"); for(std::size_t i = 0; i < v_utf16_lines.size(); ++i) { const std::wsregex_token_iterator end; std::wsregex_token_iterator ti(v_utf16_lines[i].begin(), v_utf16_lines[i].end(), pattern); for(; ti != end; ++ti) { ++w_freq; } } std::string utf8_line; utf8::utf16to8((*sit).begin(), (*sit).end(), std::back_inserter(utf8_line)); out_str += "Word \""; out_str += utf8_line; out_str += "\", freq = "; std::stringstream conv; conv << w_freq; std::string sfreq; conv >> sfreq; out_str += sfreq; out_str += '\n'; } std::ofstream out_file("result.txt", std::ios::binary); out_file.write(out_str.c_str(), out_str.size()); out_file.close(); } catch(const std::exception& e) { std::cout << e.what() << std::endl; } std::cout << "Press enter to exit..." << std::endl; std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' ); return 0; } ![]() Na boldiranom delu iz koda dobijam regex exception, ali patern bi trebao da bude standardan/regularan, ne razumem WTF? Kôd:
std::wregex pattern(L"\\b[\\p{L}]+\\b"); Hvala unapred za ideje. Poslednja izmena od morando : 16. 02. 2012. u 21:36. |
![]() |
![]() |
![]() |
#2 |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
![]() |
![]() Evo napamet (ne bi bilo lose da das trejs) - da nije problem sto mu saljes wchar kao regex (ovo L ispred literala).
Druga stvar koja moze biti je da koristis klase unicode karaktera (\p{L}) - koje kolko vidim u dokumentaciji boost regex ne podrzava. Tacnije dosta stvari ne podrzava vezane za unicode. Pogledaj http://www.boost.org/doc/libs/1_38_0...x/unicode.html Ovo sve napamet pisem - nisam programirao u C++ godinama, a i nikad mi nije palo da ga koristim za regex. Mene jako interesuje zasto koristis C++ za nesto sto je jedna linija u perl/ruby/python/bash-u |
![]() |
![]() |
![]() |
#3 |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
![]() |
![]() Offtopic:
python oneliner koji ce uraditi sta ti treba (znam da ti ne resava problem ![]() Kôd:
l = "".join(map(lambda c: " " if c in "?.!-,\"\'\/\\()" else c, open("file.txt").read())).split(); d= set((w, len(filter(lambda ww: ww==w, l))) for w in l); print d |
![]() |
![]() |
![]() |
#4 | ||
nedovoljno naspavan
Na probnom radu
Datum učlanjenja: 25.03.2011
Poruke: 21
Hvala: 7
1 "Hvala" u 1 poruci
![]() |
![]() Citat:
Nema konkretnih detalja zašto baca exception, predpostavljam zato što ne podržava \p{L} metakaraktere, što si i ti rekao. Ovako kako stoje stvari wregex je beskoristan, nadam se samo da će u nekoj sledećoj verziji VS-a srediti njegovu funkcionalnost. Citat:
Jedino da probam ovu ICU biblioteku što predlažu, ako uspem da se snađem da inkorporiram. Hvala u svakom slučaju. |
||
![]() |
![]() |
![]() |
#5 |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
![]() |
![]() Igranje sa tekstom jednostavno nije nesto za sta se C++ koristi i to ti nije bas dobra tema za vezbanje C++ a.
C++ je interesantan ako hoces da vezbas osnove algoritama - npr da napises neki sort ili zanimljivu strukturu podataka. Zanimljiv je i za mrezno programiranje naprimer. |
![]() |
![]() |
![]() |
#6 | ||
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Citat:
![]() Kôd:
p IO.read('file.txt').scan(/\p{L}+/u).group_by{|e|e}.map{|k,v|[k,v.count]} Citat:
![]()
__________________
blog |
||
![]() |
![]() |
"Hvala" jablan za poruku: |
![]() |
#7 |
I'm a PC too.
Wrote a book
Datum učlanjenja: 05.06.2005
Lokacija: Kanada
Poruke: 1.354
Hvala: 82
130 "Hvala" u 89 poruka
![]() ![]() |
![]() Coveku jasno treba pomoc u C++..
Ako ne umete da napisete resenje u C++ za ovaj problem sto covek ima, nekako se samo namece da bas i ne poznajete isti, pa onda nekako i ne stoji bas da treba da komentarisete C++ tipa za ovo je dobar, za ovo nije. Jbte, dokle vise moramo da trpimo ovakve gluposti ovde: covek pita za X i lepo kaze treba mu za X, ali evo ti bato resenje za Y, a X ti nije dobar.. hehe.
__________________
Commercial-Free !!! |
![]() |
![]() |
![]() |
#8 | |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
![]() |
![]() Citat:
Pokusao sam da pomognem - cak sam dao coveku i link ka dokumentaciji... a onda sam dao i svoje misljenje - to to ne sme vise ili sta? |
|
![]() |
![]() |
![]() |
#9 |
I'm a PC too.
Wrote a book
Datum učlanjenja: 05.06.2005
Lokacija: Kanada
Poruke: 1.354
Hvala: 82
130 "Hvala" u 89 poruka
![]() ![]() |
![]() ^Hteo sam da dodam P.S. Moj komentar se ne odnosi na prvi deo djipkove poruke, ali me mrzelo iskreno..
Stvar je da je postala uobicajena stvar da se na ovom forumu za problem u X, daje resenje u Y, uz komentar da X ionako ne valja za to ![]()
__________________
Commercial-Free !!! Poslednja izmena od degojs : 17. 02. 2012. u 16:24. |
![]() |
![]() |
![]() |
#10 |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
![]() |
![]() Ne slazem se ni sa time - covek je pitao kako da isparsira tekst koristeci C++ i regularne izraze.
Ako u toj situaciji stvarno mislis da "C++ ti mozda nije najbolji za to" nije koristan savet da se doda na kraju - onda se povlacim. |
![]() |
![]() |
![]() |
Alati teme | |
Način prikaza | |
|
|