I'm trying to read a text through the command line, and then integrate its words into a map. The text contains commas, parentheses, etc., and also German letters such as ä, ö, ü, etc. I managed to remove all the punctuation and special characters, but I'm having trouble with the umlauts. Also, words like "don't" should be treated as two separate words, "don" and "t". Do you know how I can solve this problem in my code?
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <cctype>
#include <algorithm>
#include <vector>
using namespace std;
bool compare(const pair<string, int>& a, const pair<string, int>& b) {
if (a.second == b.second) {
return a.first < b.first;
}
return a.second > b.second;
}
int main(int argc, char* argv[]) {
// Check if filename is provided and if not give error message
if (argc < 2) {
cerr << "Error: filename not provided." << endl;
return 1;
}
// Check for option flags
bool ignoreCase = false;
bool printList = false;
for (int i = 2; i < argc; i++) {
if (strcmp(argv[i], "-I") == 0) {
ignoreCase = true;
}
if (strcmp(argv[i], "-l") == 0) {
printList = true;
}
}
// Open input file and if not give error message
ifstream inFile(argv[1]);
if (!inFile) {
cerr << "Error: could not open file with name " << argv[1] << "." << endl;
return 1;
}
// Read file and create a map
map<string, int> word_count;
string word;
while (inFile >> word) {
cout << word;
// remove punctuation and special characters
word.erase(remove_if(word.begin(), word.end(), [](char c) { return !isalpha(c) && !isdigit(c); }), word.end());
// Convert to lowercase if option flag is set
if (ignoreCase == true) {
transform(word.begin(), word.end(), word.begin(), [](unsigned char c) { return tolower(c); });
}
// add word to map and increment count
++word_count[word];
}
// Get the inputfile name and find the position of the last dot in the input file name
string inputFile = argv[1];
size_t dotPos = inputFile.rfind('.');
if (dotPos != string::npos) {
// Remove everything after the last dot
inputFile.erase(dotPos);
}
// Print the word count to console and output file
string outFilename = "a01508252-" + inputFile + ".out";
ofstream outFile(outFilename);
if (printList == false) {
int totalValues = 0;
for (const auto& pair : word_count) {
cout << pair.first << ": " << pair.second << endl;
totalValues += pair.second;
}
outFile << word_count.size() << " / " << totalValues << endl;
} else { // print word count
vector<pair<string, int>> sorted_word_count(word_count.begin(), word_count.end());
sort(sorted_word_count.begin(), sorted_word_count.end(), compare);
for (const auto& pair : sorted_word_count) {
cout << pair.first << "\t" << pair.second << endl;
outFile << pair.first << "\t" << pair.second << endl;
}
}
outFile.close();
return 0;
}
The file I want to read in is
Die Bürgschaft
Friedrich von Schiller
Zu Dionys, dem Tyrannen, schlich
Damon, den Dolch im Gewande:
Ihn schlugen die Häscher in Bande,
"Was wolltest du mit dem Dolche? sprich!"
Entgegnet ihm finster der Wüterich.
"Die Stadt vom Tyrannen befreien!"
"Das sollst du am Kreuze bereuen."
"Ich bin", spricht jener, "zu sterben bereit
Und bitte nicht um mein Leben:
Doch willst du Gnade mir geben,
Ich flehe dich um drei Tage Zeit,
Bis ich die Schwester dem Gatten gefreit;
Ich lasse den Freund dir als Bürgen,
Ihn magst du, entrinn' ich, erwürgen."
Da lächelt der König mit arger List
Und spricht nach kurzem Bedenken:
"Drei Tage will ich dir schenken;
Doch wisse, wenn sie verstrichen, die Frist,
Eh' du zurück mir gegeben bist,
So muß er statt deiner erblassen,
Doch dir ist die Strafe erlassen."
Und er kommt zum Freunde: "Der König gebeut,
Daß ich am Kreuz mit dem Leben
Bezahle das frevelnde Streben.
Doch will er mir gönnen drei Tage Zeit,
Bis ich die Schwester dem Gatten gefreit;
So bleib du dem König zum Pfande,
Bis ich komme zu lösen die Bande."
Und schweigend umarmt ihn der treue Freund
Und liefert sich aus dem Tyrannen;
Der andere ziehet von dannen.
Und ehe das dritte Morgenrot scheint,
Hat er schnell mit dem Gatten die Schwester vereint,
Eilt heim mit sorgender Seele,
Damit er die Frist nicht verfehle.
Da gießt unendlicher Regen herab,
Von den Bergen stürzen die Quellen,
Und die Bäche, die Ströme schwellen.
Und er kommt ans Ufer mit wanderndem Stab,
Da reißet die Brücke der Strudel hinab,
Und donnernd sprengen die Wogen
Des Gewölbes krachenden Bogen.
Und trostlos irrt er an Ufers Rand:
Wie weit er auch spähet und blicket
Und die Stimme, die rufende, schicket.
Da stößet kein Nachen vom sichern Strand,
Der ihn setze an das gewünschte Land,
Kein Schiffer lenket die Fähre,
Und der wilde Strom wird zum Meere.
Da sinkt er ans Ufer und weint und fleht,
Die Hände zum Zeus erhoben:
"O hemme des Stromes Toben!
Es eilen die Stunden, im Mittag steht
Die Sonne, und wenn sie niedergeht
Und ich kann die Stadt nicht erreichen,
So muß der Freund mir erbleichen."
Doch wachsend erneut sich des Stromes Wut,
Und Welle auf Welle zerrinnet,
Und Stunde an Stunde entrinnet.
Da treibt ihn die Angst, da faßt er sich Mut
Und wirft sich hinein in die brausende Flut
Und teilt mit gewaltigen Armen
Den Strom, und ein Gott hat Erbarmen.
Und gewinnt das Ufer und eilet fort
Und danket dem rettenden Gotte;
Da stürzet die raubende Rotte
Hervor aus des Waldes nächtlichem Ort,
Den Pfad ihm sperrend, und schnaubet Mord
Und hemmet des Wanderers Eile
Mit drohend geschwungener Keule.
"Was wollt ihr?" ruft er vor Schrecken bleich,
"Ich habe nichts als mein Leben,
Das muß ich dem Könige geben!"
Und entreißt die Keule dem nächsten gleich:
"Um des Freundes willen erbarmet euch!"
Und drei mit gewaltigen Streichen
Erlegt er, die andern entweichen.
Und die Sonne versendet glühenden Brand,
Und von der unendlichen Mühe
Ermattet sinken die Kniee.
"O hast du mich gnädig aus Räubershand,
Aus dem Strom mich gerettet ans heilige Land,
Und soll hier verschmachtend verderben,
Und der Freund mir, der liebende, sterben!"
Und horch! da sprudelt es silberhell,
Ganz nahe, wie rieselndes Rauschen,
Und stille hält er, zu lauschen;
Und sieh, aus dem Felsen, geschwätzig, schnell,
Springt murmelnd hervor ein lebendiger Quell,
Und freudig bückt er sich nieder
Und erfrischet die brennenden Glieder.
Und die Sonne blickt durch der Zweige Grün
Und malt auf den glänzenden Matten
Der Bäume gigantische Schatten;
Und zwei Wanderer sieht er die Straße ziehn,
Will eilenden Laufes vorüber fliehn,
Da hört er die Worte sie sagen:
"Jetzt wird er ans Kreuz geschlagen."
Und die Angst beflügelt den eilenden Fuß,
Ihn jagen der Sorge Qualen;
Da schimmern in Abendrots Strahlen
Von ferne die Zinnen von Syrakus,
Und entgegen kommt ihm Philostratus,
Des Hauses redlicher Hüter,
Der erkennet entsetzt den Gebieter:
"Zurück! du rettest den Freund nicht mehr,
So rette das eigene Leben!
Den Tod erleidet er eben.
Von Stunde zu Stunde gewartet' er
Mit hoffender Seele der Wiederkehr,
Ihm konnte den mutigen Glauben
Der Hohn des Tyrannen nicht rauben."
"Und ist es zu spät, und kann ich ihm nicht,
Ein Retter, willkommen erscheinen,
So soll mich der Tod ihm vereinen.
Des rühme der blut'ge Tyrann sich nicht,
Daß der Freund dem Freunde gebrochen die Pflicht,
Er schlachte der Opfer zweie
Und glaube an Liebe und Treue!"
Und die Sonne geht unter, da steht er am Tor,
Und sieht das Kreuz schon erhöhet,
Das die Menge gaffend umstehet;
An dem Seile schon zieht man den Freund empor,
Da zertrennt er gewaltig den dichten Chor:
"Mich, Henker", ruft er, "erwürget!
Da bin ich, für den er gebürget!"
Und Erstaunen ergreifet das Volk umher,
In den Armen liegen sich beide
Und weinen vor Schmerzen und Freude.
Da sieht man kein Auge tränenleer,
Und zum Könige bringt man die Wundermär';
Der fühlt ein menschliches Rühren,
Läßt schnell vor den Thron sie führen,
Und blicket sie lange verwundert an.
Drauf spricht er: "Es ist euch gelungen,
Ihr habt das Herz mir bezwungen;
Und die Treue, sie ist doch kein leerer Wahn -
So nehmet auch mich zum Genossen an:
Ich sei, gewährt mir die Bitte,
In eurem Bunde der Dritte!"
The output I get:
und 55
die 41
er 25
der 24
da 17
den 16
dem 15
ich 15
das 11
mit 10
des 9
du 8
an 7
freund 7
mir 7
nicht 7
sich 7
von 7
doch 6
ihm 6
ihn 6
sie 6
so 6
zu 6
zum 6
aus 5
in 5
mich 5
ans 4
drei 4
ein 4
es 4
ist 4
kein 4
leben 4
sonne 4
stunde 4
tyrannen 4
am 3
bis 3
dir 3
gatten 3
knig 3
kommt 3
kreuz 3
man 3
mu 3
schnell 3
schwester 3
sieht 3
spricht 3
strom 3
tage 3
treue 3
ufer 3
um 3
vor 3
will 3
als 2
angst 2
armen 2
auch 2
auf 2
bande 2
bin 2
bitte 2
blicket 2
dritte 2
eilenden 2
euch 2
freunde 2
frist 2
geben 2
gefreit 2
gewaltigen 2
hat 2
hervor 2
ihr 2
im 2
kann 2
keule 2
knige 2
land 2
mein 2
o 2
ruft 2
schon 2
seele 2
soll 2
stadt 2
steht 2
sterben 2
stromes 2
tod 2
vom 2
was 2
welle 2
wenn 2
wie 2
wird 2
zeit 2
zurck 2
1
abendrots 1
andere 1
andern 1
arger 1
auge 1
bche 1
bckt 1
bedenken 1
beflgelt 1
befreien 1
beide 1
bereit 1
bereuen 1
bergen 1
bezahle 1
bezwungen 1
bist 1
bleib 1
bleich 1
blickt 1
blutge 1
bogen 1
brand 1
brausende 1
brcke 1
brennenden 1
brgen 1
brgschaft 1
bringt 1
bume 1
bunde 1
chor 1
damit 1
damon 1
danket 1
dannen 1
deiner 1
dich 1
dichten 1
dionys 1
dolch 1
dolche 1
donnernd 1
drauf 1
drohend 1
durch 1
eben 1
eh 1
ehe 1
eigene 1
eile 1
eilen 1
eilet 1
eilt 1
empor 1
entgegen 1
entgegnet 1
entreit 1
entrinn 1
entrinnet 1
entsetzt 1
entweichen 1
erbarmen 1
erbarmet 1
erblassen 1
erbleichen 1
erfrischet 1
ergreifet 1
erhhet 1
erhoben 1
erkennet 1
erlassen 1
erlegt 1
erleidet 1
ermattet 1
erneut 1
erreichen 1
erscheinen 1
erstaunen 1
erwrgen 1
erwrget 1
eurem 1
fat 1
felsen 1
ferne 1
fhlt 1
fhre 1
fhren 1
finster 1
flehe 1
fleht 1
fliehn 1
flut 1
fort 1
fr 1
freude 1
freudig 1
freundes 1
frevelnde 1
friedrich 1
fu 1
gaffend 1
ganz 1
gebeut 1
gebieter 1
gebrget 1
gebrochen 1
gegeben 1
geht 1
gelungen 1
genossen 1
gerettet 1
geschlagen 1
geschwtzig 1
geschwungener 1
gewaltig 1
gewande 1
gewartet 1
gewhrt 1
gewinnt 1
gewlbes 1
gewnschte 1
giet 1
gigantische 1
glaube 1
glauben 1
gleich 1
glhenden 1
glieder 1
glnzenden 1
gnade 1
gndig 1
gnnen 1
gott 1
gotte 1
grn 1
habe 1
habt 1
hast 1
hauses 1
heilige 1
heim 1
hemme 1
hemmet 1
henker 1
herab 1
herz 1
hier 1
hinab 1
hinein 1
hlt 1
hnde 1
hoffender 1
hohn 1
horch 1
hrt 1
hscher 1
hter 1
irrt 1
jagen 1
jener 1
jetzt 1
kniee 1
komme 1
konnte 1
krachenden 1
kreuze 1
kurzem 1
lange 1
lasse 1
laufes 1
lauschen 1
lchelt 1
lebendiger 1
leerer 1
lenket 1
liebe 1
liebende 1
liefert 1
liegen 1
list 1
lsen 1
lt 1
magst 1
malt 1
matten 1
meere 1
mehr 1
menge 1
menschliches 1
mhe 1
mittag 1
mord 1
morgenrot 1
murmelnd 1
mut 1
mutigen 1
nach 1
nachen 1
nahe 1
nchsten 1
nchtlichem 1
nehmet 1
nichts 1
nieder 1
niedergeht 1
opfer 1
ort 1
pfad 1
pfande 1
pflicht 1
philostratus 1
qualen 1
quell 1
quellen 1
rand 1
rauben 1
raubende 1
rauschen 1
redlicher 1
regen 1
reiet 1
rette 1
rettenden 1
retter 1
rettest 1
rhme 1
rhren 1
rieselndes 1
rotte 1
rubershand 1
rufende 1
sagen 1
schatten 1
scheint 1
schenken 1
schicket 1
schiffer 1
schiller 1
schimmern 1
schlachte 1
schlich 1
schlugen 1
schmerzen 1
schnaubet 1
schrecken 1
schweigend 1
schwellen 1
sei 1
seile 1
setze 1
sichern 1
sieh 1
silberhell 1
sinken 1
sinkt 1
sollst 1
sorge 1
sorgender 1
sperrend 1
sphet 1
sprengen 1
sprich 1
springt 1
sprudelt 1
spt 1
stab 1
statt 1
stet 1
stille 1
stimme 1
strae 1
strafe 1
strahlen 1
strand 1
streben 1
streichen 1
strme 1
strudel 1
strzen 1
strzet 1
stunden 1
syrakus 1
teilt 1
thron 1
toben 1
tor 1
treibt 1
trnenleer 1
trostlos 1
tyrann 1
ufers 1
umarmt 1
umher 1
umstehet 1
unendlichen 1
unendlicher 1
unter 1
verderben 1
vereinen 1
vereint 1
verfehle 1
verschmachtend 1
versendet 1
verstrichen 1
verwundert 1
volk 1
vorber 1
wachsend 1
wahn 1
waldes 1
wanderer 1
wanderers 1
wanderndem 1
weinen 1
weint 1
weit 1
wiederkehr 1
wilde 1
willen 1
willkommen 1
willst 1
wirft 1
wisse 1
wogen 1
wollt 1
wolltest 1
worte 1
wterich 1
wundermr 1
wut 1
zerrinnet 1
zertrennt 1
zeus 1
ziehet 1
ziehn 1
zieht 1
zinnen 1
zwei 1
zweie 1
zweige 1
What I should get out
und 55
die 41
er 25
der 24
den 16
da 15
dem 15
ich 15
das 11
mit 10
des 9
du 8
an 7
freund 7
mir 7
nicht 7
sich 7
von 7
doch 6
ihm 6
ihn 6
sie 6
so 6
zu 6
zum 6
aus 5
in 5
mich 5
ans 4
drei 4
ein 4
es 4
ist 4
kein 4
leben 4
sonne 4
stunde 4
tyrannen 4
am 3
bis 3
dir 3
gatten 3
kommt 3
kreuz 3
könig 3
man 3
muß 3
schnell 3
schwester 3
sieht 3
spricht 3
strom 3
tage 3
treue 3
ufer 3
um 3
vor 3
will 3
als 2
angst 2
armen 2
auch 2
auf 2
bande 2
bin 2
bitte 2
blicket 2
daß 2
dritte 2
eilenden 2
euch 2
freunde 2
frist 2
geben 2
gefreit 2
gewaltigen 2
hat 2
hervor 2
ihr 2
im 2
kann 2
keule 2
könige 2
land 2
mein 2
o 2
ruft 2
schon 2
seele 2
soll 2
stadt 2
steht 2
sterben 2
stromes 2
tod 2
vom 2
was 2
welle 2
wenn 2
wie 2
wird 2
zeit 2
zurück 2
abendrots 1
andere 1
andern 1
arger 1
auge 1
bedenken 1
beflügelt 1
befreien 1
beide 1
bereit 1
bereuen 1
bergen 1
bezahle 1
bezwungen 1
bist 1
bleib 1
bleich 1
blickt 1
blut 1
bogen 1
brand 1
brausende 1
brennenden 1
bringt 1
brücke 1
bunde 1
bäche 1
bäume 1
bückt 1
bürgen 1
bürgschaft 1
chor 1
damit 1
damon 1
danket 1
dannen 1
deiner 1
dich 1
dichten 1
dionys 1
dolch 1
dolche 1
donnernd 1
drauf 1
drohend 1
durch 1
eben 1
eh 1
ehe 1
eigene 1
eile 1
eilen 1
eilet 1
eilt 1
empor 1
entgegen 1
entgegnet 1
entreißt 1
entrinn 1
entrinnet 1
entsetzt 1
entweichen 1
erbarmen 1
erbarmet 1
erblassen 1
erbleichen 1
erfrischet 1
ergreifet 1
erhoben 1
erhöhet 1
erkennet 1
erlassen 1
erlegt 1
erleidet 1
ermattet 1
erneut 1
erreichen 1
erscheinen 1
erstaunen 1
erwürgen 1
erwürget 1
eurem 1
faßt 1
felsen 1
ferne 1
finster 1
flehe 1
fleht 1
fliehn 1
flut 1
fort 1
freude 1
freudig 1
freundes 1
frevelnde 1
friedrich 1
fuß 1
fähre 1
fühlt 1
führen 1
für 1
gaffend 1
ganz 1
ge 1
gebeut 1
gebieter 1
gebrochen 1
gebürget 1
gegeben 1
geht 1
gelungen 1
genossen 1
gerettet 1
geschlagen 1
geschwungener 1
geschwätzig 1
gewaltig 1
gewande 1
gewartet 1
gewinnt 1
gewährt 1
gewölbes 1
gewünschte 1
gießt 1
gigantische 1
glaube 1
glauben 1
gleich 1
glieder 1
glänzenden 1
glühenden 1
gnade 1
gnädig 1
gott 1
gotte 1
grün 1
gönnen 1
habe 1
habt 1
hast 1
hauses 1
heilige 1
heim 1
hemme 1
hemmet 1
henker 1
herab 1
herz 1
hier 1
hinab 1
hinein 1
hoffender 1
hohn 1
horch 1
hält 1
hände 1
häscher 1
hört 1
hüter 1
irrt 1
jagen 1
jener 1
jetzt 1
kniee 1
komme 1
konnte 1
krachenden 1
kreuze 1
kurzem 1
lange 1
lasse 1
laufes 1
lauschen 1
lebendiger 1
leerer 1
lenket 1
liebe 1
liebende 1
liefert 1
liegen 1
list 1
lächelt 1
läßt 1
lösen 1
magst 1
malt 1
matten 1
meere 1
mehr 1
menge 1
menschliches 1
mittag 1
mord 1
morgenrot 1
murmelnd 1
mut 1
mutigen 1
mühe 1
nach 1
nachen 1
nahe 1
nehmet 1
nichts 1
nieder 1
niedergeht 1
nächsten 1
nächtlichem 1
opfer 1
ort 1
pfad 1
pfande 1
pflicht 1
philostratus 1
qualen 1
quell 1
quellen 1
rand 1
rauben 1
raubende 1
rauschen 1
redlicher 1
regen 1
reißet 1
rette 1
rettenden 1
retter 1
rettest 1
rieselndes 1
rotte 1
rufende 1
räubershand 1
rühme 1
rühren 1
sagen 1
schatten 1
scheint 1
schenken 1
schicket 1
schiffer 1
schiller 1
schimmern 1
schlachte 1
schlich 1
schlugen 1
schmerzen 1
schnaubet 1
schrecken 1
schweigend 1
schwellen 1
sei 1
seile 1
setze 1
sichern 1
sieh 1
silberhell 1
sinken 1
sinkt 1
sollst 1
sorge 1
sorgender 1
sperrend 1
sprengen 1
sprich 1
springt 1
sprudelt 1
spähet 1
spät 1
stab 1
statt 1
stille 1
stimme 1
strafe 1
strahlen 1
strand 1
straße 1
streben 1
streichen 1
strudel 1
ströme 1
stunden 1
stößet 1
stürzen 1
stürzet 1
syrakus 1
teilt 1
thron 1
toben 1
tor 1
treibt 1
trostlos 1
tränenleer 1
tyrann 1
ufers 1
umarmt 1
umher 1
umstehet 1
unendlichen 1
unendlicher 1
unter 1
verderben 1
vereinen 1
vereint 1
verfehle 1
verschmachtend 1
versendet 1
verstrichen 1
verwundert 1
volk 1
vorüber 1
wachsend 1
wahn 1
waldes 1
wanderer 1
wanderers 1
wanderndem 1
weinen 1
weint 1
weit 1
wiederkehr 1
wilde 1
willen 1
willkommen 1
willst 1
wirft 1
wisse 1
wogen 1
wollt 1
wolltest 1
worte 1
wundermär 1
wut 1
wüterich 1
zerrinnet 1
zertrennt 1
zeus 1
ziehet 1
ziehn 1
zieht 1
zinnen 1
zwei 1
zweie 1
zweige 1
Aucun commentaire:
Enregistrer un commentaire