| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

05-11-2007, 16:57
|
|
Coniaric
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 320
|
|
Häufigkeiten vergleichen
Hallo und guten Abend,
ich will folgendes machen:
Ich habe eine Tabelle, in der die Häufigkeit der Buchstaben im
Deutschen Alphabet vorkommt. Die sieht so aus:
a 6,51 %
b 1,89 %
c 3,06 %
...
Ich will jetzt aus einem Text die Häufigkeit der Buchstaben ermitteln,
das geht ja noch relativ einfach. Ich zähle einfach z.B. wie oft im String
das "b" vorkommt und berechne aus der Gesambuchstabenzahl die Häufigkeit.
Als Ergebnis hab ich dann z.B. 1.94 %
Nehmen wir jetzt an, ich weiß nicht, um welchen Buchstaben es sich handelt,
dann möchte ich zu folgendem Ergebnis kommen:
"Das Zeichen xy hat im Text eine Häufigkeit von 1,94 % - das entspricht
am ehesten dem Buchstaben "b" mit einer Abweichung von 0,05%"
Um es dann zu verfeinern, wäre noch schön,
die nahesten 3 Buchstaben auszugeben, die zu dem Ergbnis passen.
Mein Problem dabei ist eigentlich nur,
zwei _ähnliche_ Zahlen miteinander zu vergleichen,
alles andere sollte kein Problem sein.
Weiß jemand, wie das geht? Gibt es dafür eine Funktion?
Hab leider nichts passendes gefunden...
Danke schonmal,
Coni
__________________
Gruß, Coni
~~ codito ergo sum - ich code, also bin ich! ~~
|

05-11-2007, 17:11
|
|
arkos
PHP Senior
|
|
Registriert seit: Feb 2003
Ort: hamburg
Beiträge: 1.015
|
|
Re: Häufigkeiten vergleichen
Zitat:
Original geschrieben von Coniaric
Hallo und guten Abend,
ich will folgendes machen:
Ich habe eine Tabelle, in der die Häufigkeit der Buchstaben im
Deutschen Alphabet vorkommt. Die sieht so aus:
a 6,51 %
b 1,89 %
c 3,06 %
...
|
sobald du mir erklärst, seit wann das a häufiger im alphabet vorkommt, als das b, schau ich mal den rest durch
edit: naja noch ma im ernst. ich denke (wenn du schon tabellen hast), dann lös das übern query:
Code:
select * from alphabet where haufigkeit > ermittelte_haufigkeit order by haeufigkeit asc limit 1;
__________________
**********
arkos
**********
Geändert von arkos (05-11-2007 um 17:19 Uhr)
|

05-11-2007, 17:17
|
|
Coniaric
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 320
|
|
Haahaa.
Okay, war etwa unglücklich ausgedrückt.
Genau:
Wie häufig ein Buchstabe des deutschen Alphabets in allen Wörtern
(sprich, z.B. im Duden, in langen Texten usw.) vorkommt.
Klar, es ist ein rein statistischer Wert,
aber von irgendwas muß man ja ausgehen...
EDIT:
http://de.wikipedia.org/wiki/Buchstabenh%C3%A4ufigkeit
__________________
Gruß, Coni
~~ codito ergo sum - ich code, also bin ich! ~~
|

05-11-2007, 17:20
|
|
arkos
PHP Senior
|
|
Registriert seit: Feb 2003
Ort: hamburg
Beiträge: 1.015
|
|
s. edit ...
hab erst nach deinem post editiert... oder mal wieder zu lange gebraucht
__________________
**********
arkos
**********
|

05-11-2007, 19:40
|
|
Coniaric
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 320
|
|
Re: Re: Häufigkeiten vergleichen
Code:
select * from alphabet where haufigkeit > ermittelte_haufigkeit order by haeufigkeit asc limit 1;
Hm, danke, für eine SQL-Lösung schonmal nicht schlecht.
Aber wenn
haufigkeit1=10
haufigkeit2=15
ermittelte_haufigkeit=11
ist, dann spuckt er ja h2 aus, obwohl h1 Näher dran wäre.
Und wenn ich 3 Ergebnisse will,
dann geht das so auch nicht,
weil die Näherung ja von beiden Seiten sein kann.
Grüße,
Coni
EDIT:
Vorerst hab ich noch gar keine Tabelle, ich dachte,
es ließe sich vielleicht erstmal einfach über eine PHP-Funktion lösen, à la
naeherungsfunktion($anzahl, $haufigkeit);
Ein anderer Lösungsansatz wäre ein Schleife, in der ich
den Geringsten und den höchsten Wert durch eine FOR-Schleife in
0.01er Schritten laufen lasse und für jeden ermittelten Wert den
geringsten Abstand in eine Variable speichere - wenn es nicht
einfacher geht!
__________________
Gruß, Coni
~~ codito ergo sum - ich code, also bin ich! ~~
Geändert von Coniaric (05-11-2007 um 19:47 Uhr)
|

05-11-2007, 19:57
|
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.746
|
|
Du hast ein mathematisches Problem! Löse es erstmal, dann kannst du über die Umsetzung in PHP nachdenken. Wenn du dann Probleme bei der Umsetzung hast, dann poste:
1. deine mathematische Lösung
2. deine Umsetzungsprobleme
|

05-11-2007, 20:04
|
|
Coniaric
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 320
|
|
Zitat:
Original geschrieben von asp2php
Du hast ein mathematisches Problem!
|
Klar, wenn es dafür keine Funktion gibt, hab ich ein mathematisches
Problem, dann hast Du recht. Darum hab ich aber gefragt!
Wenn die Antwort lautet, es gibt dafür keine Funktion,
dann werd ich mich natürlich erstmal zurückziehen und schauen,
wie die logische Lösung ist, bevor die programmiertechnische
kommt.
Aber da ich nicht alle Funktionen von PHP kenne (das sind ja schließlich
ein paar und die Suche in der Referenz hat auch nichts gebracht),
frage ich. Hätte ja durchaus sein können und ich hätte
mir viel Zeit ersparen können, das umständlich zusammenzubauen.
(So ging es mir nämlich schonmal mit preg_match und der einen
oder anderen Berechnung von DATE-TIME-Feldern)
__________________
Gruß, Coni
~~ codito ergo sum - ich code, also bin ich! ~~
|

05-11-2007, 20:12
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Zitat:
Hm, danke, für eine SQL-Lösung schonmal nicht schlecht.
Aber wenn
haufigkeit1=10
haufigkeit2=15
ermittelte_haufigkeit=11
ist, dann spuckt er ja h2 aus, obwohl h1 Näher dran wäre.
Und wenn ich 3 Ergebnisse will,
dann geht das so auch nicht,
weil die Näherung ja von beiden Seiten sein kann.
|
Dann nimm die Näherung von beiden Seiten:
Code:
select buchstabe, abs( häufigkeit - ermittelte_häufigkeit ) as h
from alphabet
order by h
limit 0,3
Ungetestet, gibt dir aber die 3 nahesten Buchstaben zurück.
|

05-11-2007, 20:18
|
|
Coniaric
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 320
|
|
Danke!
Ich muß zugeben, da wär ich jetzt garnicht drauf gekommen...
werd gleich mal damit experimentieren.
__________________
Gruß, Coni
~~ codito ergo sum - ich code, also bin ich! ~~
|

05-11-2007, 20:23
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
höhö, da war ich aber dermaßen lahm, die zwei Postings vor mir waren da noch nicht da ^^
Nächstmal hole ich das Bier nach dem Posting
|

05-11-2007, 20:27
|
|
Coniaric
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 320
|
|
Zitat:
Original geschrieben von PHP-Desaster
höhö, da war ich aber dermaßen lahm, die zwei Postings vor mir waren da noch nicht da ^^
Nächstmal hole ich das Bier nach dem Posting
|
Dennoch warst Du asp2php um einen logischen Schritt voraus! ;-)
__________________
Gruß, Coni
~~ codito ergo sum - ich code, also bin ich! ~~
|

05-11-2007, 20:32
|
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.746
|
|
Zitat:
Original geschrieben von Coniaric
Dennoch warst Du asp2php um einen logischen Schritt voraus! ;-)
|
Nur weil du nichts mit Mathe anfangen kannst? Ich biete generell keine fertige Lösung an!
|

05-11-2007, 20:36
|
|
Coniaric
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 320
|
|
Ich wollte ja keine fertige Lösung, nur eine Funktion, die es bereits gibt in PHP.
Ich will ja das Rad nicht neu erfinden!
Stimmt, ich kann mit Mathe nicht so viel anfangen. Allerdings ist PHP
für mich so praxisnah, daß ich da meist keine Probleme habe
und wie oben schon erwähnt, wollte ich mich eingehend damit beschäftigen,
bevor ich wieder poste. Er war aber schneller!
__________________
Gruß, Coni
~~ codito ergo sum - ich code, also bin ich! ~~
|

05-11-2007, 20:36
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Zitat:
Original geschrieben von asp2php
Nur weil du nichts mit Mathe anfangen kannst? Ich biete generell keine fertige Lösung an!
|
Vielleicht mache ich das nach meinen nächsten 9000 Postings auch nicht mehr
|

05-11-2007, 20:48
|
|
Coniaric
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 320
|
|
Nach 10000 Postings hier muß man auch schon ganz schön blass sein... ;-)
Ist nicht negativ gemeint, ich bin ja froh, daß hier so erfahrene Programmierer rumlaufen!
__________________
Gruß, Coni
~~ codito ergo sum - ich code, also bin ich! ~~
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|