[C++] keywoorden zoeken in .txt en .htm

Pagina: 1
Acties:
  • 443 views

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik moet als onderdeel van mijn scriptie een onderzoek uit een academisch artikel nabootsen. Dit houdt in dat ik ook het volgende moet doen:
"Write a program to search the body of 10-K reports for all keywords related to hedging."

Die 10-K reports zijn jaarverslagen van bedrijven die gecontroleerd zijn door accountants. De bestanden zijn van het formaat .txt of .htm zoals deze en deze.
Het gaat om een stuk of 15 keywords en minstens 100 .txt en .htm bestanden. Dus ctrl+f is een beetje omslachtig.

Ik heb begrepen dat het zoeken naar keywords in een bestand moet kunnen met C++. Ik heb nu Microsoft Visual C++ 2008 Express Edition aan de gang gekregen, maar ben nog niet verder gekomen dan de "hello world"-stap. Ik begrijp dat Google mijn vriend is, maar ik heb geen kant-en-klare code kunnen vinden en weet eigenlijk ook niet waar ik precies naar moet zoeken. Zouden jullie me een paar tips kunnen geven? Is C++ de makkelijkste manier om dit te doen? Ben ik op de goede weg?

Ik heb vrijwel geen ervaring met programmeren (alleen een beetje Visual Basic).

Alvast duizend maal dank voor de medewerking.

Roy

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Het is belangrijk om te weten dat C++ een nogal ingewikkelde taal is. Zeker als je hooguit ervaring hebt met een beetje Visual Basic is dit niet echt iets waar je zomaar aan wilt beginnen. Je kunt beter kijken of er oplossingen zijn in een taal waar je wel ervaringen mee hebt (100 bestanden is niet zoveel, ik denk niet dat er een taal is die daar echt niet mee om kan gaan). Sowieso zou ik er niet op rekenen dat je hier veel hulp gaat krijgen bij het vinden van kant-en-klare oplossingen. Daar is dit forum gewoonweg niet voor bestemd, dit forum is meer voor wanneer je zeer specifieke problemen echt niet kunt oplossen.

Acties:
  • 0 Henk 'm!

  • Forcepoint
  • Registratie: Januari 2007
  • Laatst online: 19:35
Als je al een beetje ervaring hebt met Visual Basic zou ik eens kijken naar VB.Net. Simpel maar uitgebreid Framework waarmee je met gemak kan doen wat jij wilt. Kijk dan gelijk naar de StreamReader class.

En wat Patriot zegt idd, C++ is niet echt een taal waar je zo 1-2-3 mee begint.

Acties:
  • 0 Henk 'm!

  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 18-05 17:57
Mja, naar een woord zoeken in een bestand is niet vreselijk moeilijk, je kunt met een ifstream de file openen, met de getline functie steeds een regel per keer naar een string object lezen en met de find method van de string class zoeken naar woorden.

Dan blijft nog de vraag wat je precies met de informatie wilt doen, want op deze manier heb je gewoon een stuk functionaliteit van grep nagebouwd.

Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.


Acties:
  • 0 Henk 'm!

Verwijderd

Mijn persoonlijk ervaring dat Python voor dit soort klusjes zeer geschikt is. Het is gemakkelijk te leren, en je hebt maar een fractie van de code (en tijd) nodig die met talen als C++ nodig hebt.

C++ is voor deze klus niet ideaal (ter info: ik heb ruim 15 jaar professionele ervaring met C++). Het fijne van Python is ook dat je een regel code kan intikken en meteen het effect kan zien.

Het Python programmaatje hier onder laat alle regels zien in alle *.txt files met het word 'Test'

Python:
1
2
3
4
5
6
import glob
for fn in glob.glob("*.txt"):
    f = file(fn)
    for line in f:
        if 'Test' in line:
            print(f.name +": " + line)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank jullie wel voor de hulp.
Ik was inderdaad vergeten te vermelden wat ik met de keywoorden wil doen. Ik zou graag in 1 opslag willen zien waar de keywords allemaal staan. In de regel (erboven of eronder) waar het keywoord in staat, staat (waarschijnlijk) een cijfer dat ik wil weten. Met de gevonden cijfers ga ik daarna met Excel berekeningen uitvoeren van financiële aard.

Ik heb zojuist gekeken naar StreamReader en Python, en de laatste ziet er goed uit. De uitleg over het programma op hun eigen website is duidelijk (zelfs voor beginners). Maar het is in ieder geval duidelijk, dat ik er nog wat uren in moet steken voordat er een degelijk resultaat uit komt rollen. Dus verdere tips en andere aanbevelingen blijven welkom.

Acties:
  • 0 Henk 'm!

  • simplicidad
  • Registratie: November 2006
  • Laatst online: 20:08
Ik kan enkel maar beamen wat de Zeester zegt. Voor dergelijke taken is python echt enorm aan te raden.

Wat ik je alleszins kan aanraden zijn volgende websites

http://diveintopython.org/
http://effbot.org/zone/librarybook-index.htm

Mss is het volgende (ondanks uw VB kennis) ook wel iets

http://en.wikibooks.org/w...l_for_Python_2.0/Contents

[ Voor 20% gewijzigd door simplicidad op 07-09-2009 21:57 ]


Acties:
  • 0 Henk 'm!

  • Eddy Dean
  • Registratie: November 2007
  • Laatst online: 16-09 15:20
Niet getest, maar zou
code:
1
grep -i -r -C 2 -H -n -E 'woord1|woord2' *
niet werken, als je in plaats van 'woord1|woord2' een lijst maakt van de woorden waar je op wilt zoeken? Dit commando gaat er van uit dat alle bestanden die je wilt doorzoeken in de huidige directory of subdirectories staan.

Ik zie eigenlijk geen reden om hier een eigen programma voor te schrijven.

EDIT:
Nu wel getest, en het commando hierboven werkt.

[ Voor 7% gewijzigd door Eddy Dean op 07-09-2009 22:16 . Reden: foutje ]


Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
@hierboven:
Ik was inderdaad vergeten te vermelden wat ik met de keywoorden wil doen. Ik zou graag in 1 opslag willen zien waar de keywords allemaal staan. In de regel (erboven of eronder) waar het keywoord in staat, staat (waarschijnlijk) een cijfer dat ik wil weten. Met de gevonden cijfers ga ik daarna met Excel berekeningen uitvoeren van financiële aard.

Acties:
  • 0 Henk 'm!

  • Eddy Dean
  • Registratie: November 2007
  • Laatst online: 16-09 15:20
Juist, daarom laat ik grep ook twee regels aan context printen.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Had je projectbegeleider geen suggesties?

Als het doel is simpelweg die documenten te doorzoeken dan zou ik ze gewoon in Lucene pleuren ofzoiets en niet zelf iets from scratch gaan schrijven. Dat kan nog best veel werk worden als je ook HTML moet gaan parsen, woorden moet gaan stemmen, documenten moet indexeren, et cetera terwijl er al stapels tools en libraries zijn die dat geheel of gedeeltelijk voor je kunnen doen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb vorige week eventjes met mijn begeleider gepraat hierover. Het kwam er op neer dat ik het eerst zelf moet zien op te lossen en mocht ik er niet uikomen, dan zou hij me deze week gaan helpen. Maar je hebt gelijk, dit onderdeel van de scriptie kan behoorlijk veel tijd in beslag nemen. Het probleem is dan ook dat ik helaas niet bekend ben met die "stapels tools en libraries". Dus ik ben nu op een lastig punt in het schrijven-van-een-scriptie-process.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Misschien moet je toch nog even met hem overleggen dan. Het is goed dat je het zelf probeert op te lossen, maar nu lijkt het er op dat je niet eens weet wát je precies zelf zou moeten oplossen.

Ik ben een ervaren programmeur maar ik zou ook niet weten hoe ik dit aan zou moeten pakken. Ik zou weinig zin hebben om een SGML-parser te schrijven; daarvoor zou ik dan liever een library gebruiken. Maar dat geldt eigenlijk voor alle onderdelen, en als je die redenering doortrekt kom je er op uit dat je gewoon een off the shelf pakket voor indexeren en zoeken gebruikt, want je lijkt geen bijzondere eisen te hebben die dat onmogelijk maken.

Maar dat zal gezien de vraagstelling dan wel weer niet de bedoeling zijn. Het lijkt me aan je begeleider om aan te geven wat er dan precies van je verlangd wordt.

[ Voor 11% gewijzigd door Soultaker op 07-09-2009 23:06 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het lijkt er gewoon op dat je niet genoeg kennis in huis hebt om dit uit te voeren. In principe kan dit gewoon in bijna elke taal die je zou willen. Java/C#/VB.NET/Python/C++/Lisp/etc.. kunnen dit allemaal. Maar met welke taal je het het beste kunt doen, kunnen we je hier niet helpen. Zoek daarvoor maar eens in PRG naar "Welke Taal", en dan zul je zien dat daar al een hele hoop topics over zijn, waar het er allemaal op neer komt dat er niet echt een goed antwoord op is.

Mocht je het in C++ willen doen, dan zul je eerst eens een goed boek of cursus moeten zoeken. Op zich is het een leuke uitdaging om C++ te leren, maar ik denk dat de leercurve vrij groot is. Mocht het een eenmalige opdracht zijn, dan zou je eens naar iets als Python kunnen kijken, daar kun je redelijk eenvoudig wat scriptjes mee in elkaar zetten. Maar het is natuurlijk de vraag wat het doel van je scriptie precies is. Is het echt de bedoeling dat je een net programma krijgt, of is het alleen een hulpmiddel voor de rest van je onderzoek. Want als het de bedoeling is dat je een mooi programma oplevert, dan zul je sowieso eerst de basics van programmeren moeten leren, want als je zomaar begint met programmeren zonder de basis te kennen, dan is de kans zeer groot dat je programma een rommeltje word.

PRG gaat verder over concrete programmeer problemen, terwijl dit topic meer gaat over het leren programmeren en in welke taal je iets moet maken. Daarom doe ik deze op slot. Mocht je tijdens het maken van je programma toch nog problemen tegen komen dan kun je natuurlijk gerust een topic openen.

Verder zou ik inderdaad eens goed met je begeleider overleggen wat nou precies de bedoeling is. Het lijkt me vreemd dat je voor een scriptie zomaar uit het niets moet leren programmeren.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1

Dit topic is gesloten.