| |
Fortgeschrittene ProgrammierungRe: Vokale & Umlaute...Permutation? | | | Autor: Preisser | Datum: 21.10.10 18:46 |
| Hallo,
nun, dafür könnte man beispielsweise ein Array aus Char-Arrays erstellen, das für jeden Buchstaben im Wort die möglichen Variationen für diesen auflistet. Dann muss man nur das immer so durchlaufen und daraus die neuen Wörter bilden.
Allerdings ist auf diese Weise das ganze in VB6 ein bisschen schwieriger zu implementieren als in Sprachen wie C# und Java, da man unter VB6 keine Chars hat, sondern nur Strings, und meines Wissens auch keine Arrays aus Arrays erstellen kann (damit sind keine mehrdimensionalen Arrays gemeint). Wenn man das ganze also mit mehrdimensionalen Arrays machen würde, bräuchte man ein nxm-Array, wobei n die Länge des Wortes ist und m die maximale Anzahl an Variationen für ein bestimmtes Zeichen.
In C# könnte das ganze folgendermaßen aussehen (hab mich leider mit der VB.Net-Syntax noch nicht so befasst, und in VB6 ist es auf diese Weise wie gesagt ein wenig aufwändig zu programmieren, es sollte aber dennoch möglich sein).
public static string[] getPermutationen(string eingabe) {
//' Wort kleinschreiben, um Zeichen zu finden
string eingabeNormal = eingabe.ToLower();
bool[] konvGross = new bool[eingabe.Length];
//' die Zeichen, bei denen Vertauschungen möglich sind
string[] varZeichen = {"aäáàâ", "eéèê", "iíìî", "oöóòô", "uüúùû"};
string[] perms; //' Rückgabewert
char[][] charPerms = new char[eingabe.Length][];
int[] charPermsZaehler = new int[charPerms.Length];
int anzahlPermutationen = 1; //' die Anzahl an Permutationen (insgesamt)
//' Schauen, für welche Zeichen es verschiedene Varianten gibt
for (int k = 0; k < eingabe.Length; k++) {
konvGross[k] = char.ToUpper(eingabe[k]) == eingabe[k];
for (int j = 0; j < varZeichen.Length; j++) {
if (varZeichen[j].IndexOf(eingabeNormal[k]) >= 0) {
//' variables Zeichen
charPerms[k] = varZeichen[j].ToCharArray();
}
}
if (charPerms[k] == null) //' einfaches Zeichen
charPerms[k] = new char[] {eingabe[k]};
anzahlPermutationen *= charPerms[k].Length;
}
perms = new string[anzahlPermutationen];
char[] neuesWort = new char[eingabe.Length];
for (int k = 0; k < anzahlPermutationen; k++) {
for (int z = 0; z < neuesWort.Length; z++) {
neuesWort[z] = charPerms[z][charPermsZaehler[z]];
if (konvGross[z])
neuesWort[z] = char.ToUpper(neuesWort[z]);
}
perms[k] = new string(neuesWort);
charPermsZaehler[charPermsZaehler.Length - 1]++; //' Zähler erhöhen
for (int j = charPermsZaehler.Length - 1; j > 0; j--) {
if (charPermsZaehler[j] == charPerms[j].Length) {
charPermsZaehler[j] = 0;
charPermsZaehler[j - 1]++;
}
}
}
return perms;
} Die Strings in dem varZeichen-Array geben dabei an, bei welchen Zeichen solche Vertauschungen möglich sind. Es wird z.B. auch bei Eingabe von "ä" ein Array mit "a", "ä", "á" usw. geliefert. Großbuchstaben werden auch berücksichtigt.
Beitrag wurde zuletzt am 21.10.10 um 19:15:37 editiert. | |
Vokale & Umlaute...Permutation? | | | Autor: CyberDreams | Datum: 21.10.10 16:37 |
| Hy @all,
hat von euch zufällig ein paar Tipps & Tricks, wie ich folgende Problemstellung lösen kann?
Man gibt in einer Textbox zB das Wort "Maier" ein.
Nun bräuchte ich eine Prozedur, die mir folgendes bewerkstelligt:
Es sollten ALLE Möglichkeiten des Wortes Maier mit Umlauten (abhängig von den Vokalen) ermittelt werden.
zB.
Maier
Mäier
Máier
Maiér
Maièr
Mäiér
Mäièr
...
..
etc etc etc
Hat eventuell jemand ein paar Tipps für mich oder gar schon ein entsprechendes Code-Schnippsel rumliegen?
Vielen Dank und Lg,
Cyber | |
Re: Vokale & Umlaute...Permutation? | | | Autor: CyberDreams | Datum: 22.10.10 08:32 |
| Vielen vielen vielen lieben Dank Preisser, das war GENAU DAS, was ich gesucht hatte | |
Re: Vokale & Umlaute...Permutation? | | | Autor: CyberDreams | Datum: 22.10.10 13:50 |
| Wie müsste ich den Code ändern, dass er noch beispielsweise folgende Regel einhält:
Wenn man die Permutation des Wortes "Muller" durchführen lässt, so sollte es so sein, dass wenn ein Umlaut (hier also das ü) vorkommt, keine Buchstaben mit Axon darin vorkommen dürfen (also kein é oder è).
Des weiteren wäre noch fein, wenn begrenzt werden würde, dass in einem Wort maximal 2 Buchstaben mit Axon vorkommen dürfen...
Durch diese beiden Regeln würde sich die Anzahl der Permutationen teils deutlich verringern...
Vielen lieben Dank nochmal für den ersten Codeblock. Würde mich freuen, wenn du mich hier noch ein bisschen unterstützen könntest
Lg,
Cyber | |
Re: Vokale & Umlaute...Permutation? | | | Autor: CyberDreams | Datum: 22.10.10 15:41 |
| Vielen Dank für die Info Martoeng. Wie nennt man diesen Vorgang denn dann?
Ich habe hier das Problem, dass ich über IXSSO/Cisso einen "Indexing Service" abfragen muss. Da hier manche Namen mal so und mal so geschrieben sind, und ich keinerlei Möglichkeit gefunden habe, das den IDXS selbst machen zu lassen, bleibt mir leider nur diese Variante übrig.
Du hast recht... Mäiér macht keinen Sinn...deshalb auch die weitere Anfrage, ob man in die Funktion noch quasi Regeln einbauen kann. Denn wenn "herkömmliche" Umlaute wie ä,ö und ü vorkommen, dann sollen keine weiteren Möglichkeiten ausgespuckt werden, die Accents (danke für die Korrektur) enthalten. Und es gibt anscheinend recht wenige Wörter, die mehr als 2 Accents-Buchstaben beinhalten. Deshalb auch diese Regeln...
Lg,
Cyber | |
Re: Vokale & Umlaute...Permutation? | | | Autor: gunthard | Datum: 26.10.10 09:12 |
| CyberDreams schrieb:
Zitat: | |
Wenn man die Permutation des Wortes "Muller"
durchführen lässt, so sollte es so sein, dass wenn ein Umlaut
(hier also das ü) vorkommt, keine Buchstaben mit Axon darin
vorkommen dürfen (also kein é oder è).
| |
Davon kannst Du nicht ausgehen. Es gibt heute immer mehr Doppelnamen. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|