~/home of geeks

Babylon

· 8475 Wörter · 40 Minute(n) Lesedauer

ancient sumerian marketplace, crowded, many people with diverse cultural appearances, meeting and talking, background ultra high tower of babylon touching the sky, photography

Seit kurzem befasse ich mich mit Sprachenerkennung. Nein, ich meine nicht speech recognition, sondern language detection, also das automatische Erkennen der Sprache eines Textes.

Eigentlich wollte ich es nicht schon wieder selber machen, und suchte im Netz nach einer vorhandenen Möglichkeit, Texte zu Sprachen zuzuordnen. Doch leider konnte ich keine vorgefertigte LGPL Open Source Java API dafür finden.

Eine Möglichkeit, die ich jedoch noch nicht in Betracht gezogen habe, ist die Classifier4j API, welche mit Bayesschen Netzen und Vector-Space Modellen aufwartet. Aber damit beginnt schon die Komplexitätsbetrachtung einer Lösung.

Sicherlich gibt es recht komplexe Klassifikationsansätze, doch meine derzeitige Arbeit beschränkt sich auf einfache Methoden, auf die mich zwei Erinnerungen und ein Dokument brachten.

Die erste Erinnerung bezieht sich auf ein Thema, mit dem ich mich früher gerne befasst habe: das Thema Kryptologie, wo man für verschiedene Sprachen die Häufigkeiten der verschiedenen Buchstaben ermittelt, um bei monoalphabetischen Substitiutionen den Brute-Force Angriff in einen statistischen Angriff umzuwandeln. Damit ist klar, dass jede Sprache eine andere Häufigkeitsverteilung der Buchstaben besitzen sollte.

Die zweite Erinnerung bezieht sich auf etwas, dass mir mein Kommilitone Roman mal erzählte: In ihrem Mathematik-Praktikum sollten sie Texte anhand von statistischen Analysen, also Häufigkeiten von Buchsten und Buchstabenkombinationen, das Fachgebiet des Textes ermitteln.

Schließlich fand ich ein Studentenprojekt im Internet mit dem Titel ToSoBaP - Towards Solving the Babel Problem, was sich genau mit diesem Thema beschäftigt. Doch obwohl einige Teile der dort beschriebenen API scheinbar bereits realisiert wurden, hat man keinen Zugriff darauf. Dafür ist dort eine sehr interessante Spezifikation zu finden, welche die Grundideen zusammenfaßt.

Dort heißt es zur Sammlung von Methoden (S. 7):

Statistische:

  • N-gramme (Uni-/Bi-/Tri-) für
    • Zeichen
    • Konsonant-Vokal Folgen
  • Häufigste (also kurze) Wörter
  • HMMs: Zeichen und Übergangswahrscheinlichkeiten
  • Durchschnittliche Wortlänge

Eher linguistische:

  • Charakteristische Wörter, z.B. grammatische
  • Silbenbau
  • Morphologie: Prä- und Suffixe
  • Zeichensatz, Sonderzeichen
  • Textstruktur (Zitate, Absätze)

Eine schöne Zusammenfassung. Die eher komplizierteren Varianten Silbenbau, Textstruktur, HMM (Hidden Markiv Modelle, wie etwa Bayessche Netze) seien erst einmal auf einen sehr viel späteren Zeitpunkt zurückgestellt, da sie doch recht kompliziert sind. Demgegen sind die anderen Ansätze recht simpel zu implementieren.

N-gramme #

N-Gramme sind einfach Kombinationen aus Buchstaben. Das N steht für die Länge der Kombinationen. Die einfachste Variante sind die Unigramme, also einfach nur die einzelnen Buchstaben. Ich habe für meine kleine Anwendung eine Liste von analysierten Buchstaben aufgestellt, zumal ich eigentlich nur Deutsch und Englisch beherrsche und mich mit chinesischen Symbolen nicht herumschlagen wollte. Natürlich schließt dies automatisch die Erkennung aller nicht-Latein-Lettern benutzenden Sprachen aus, aber mir soll es vorerst reichen. Man kann das ganze natürlich auf den gesammten UTF-8 Zeichensatz ausbauen, aber damit steigt auch der Speicher und Zeitbedarf.

Also: LETTERS = "abcdefghijklmnopqrstuvwxyzäöüïßABCDEFGHIJKLMNOPQRSTUVWXYZ"

Wie man sehen kann, habe ich zwischen Groß- und Kleinbuchstaben unterschieden. Ist doch offensichtlich, dass die Deutsche Sprache mit großgeschriebenen Nomen mehr Großbuchstaben enthält als die englische Sprache, welche nur Namen und am Satzanfang Kapitallettern benutzt. hat natürlich den nachteil, dass man in deutschen texten, in denen der author zu faul war, die groß-/kleinschreibung anzuwenden, gefahr läuft, die Spache falsch zu klassifizieren…

Mittels einer Hash-Tabelle werden die absoluten Häufigkeiten verschiedener Texte in Deutsch und Englisch ermittelt. Die Texte stammen übrigens aus dem Projekt Gutenberg.

Das Ergebnis für die Unigramme aus 16 deutschen und 16 englischen Texten:

analyser LetterFrequencyAnalyser
language deutsch
total 5028264
token a b c d e f g
abs. 245.423 083.793 151.053 246.300 854.427 065.149 142.384
rel. 0,04881 0,01666 0,03004 0,04898 0,16992 0,01296 0,02832
token h i j k l m n
abs. 233.490 415.379 006.435 050.511 178.153 109.049 518.658
rel. 0,04644 0,08261 0,00128 0,01005 0,03543 0,02169 0,10315
token o p q r s t u
abs. 103.733 021.512 000.464 334.458 319.406 284.869 182.984
rel. 0,02063 0,00428 0,00009 0,06652 0,06352 0,05665 0,03639
token v w x y z ä ö
abs. 030.029 070.533 001.236 002.726 051.973 024.918 012.483
rel. 0,00597 0,01403 0,00025 0,00054 0,01034 0,00496 0,00248
token ü ß A B C D E
abs. 027.973 023.995 018.552 017.513 000.893 016.434 016.564
rel. 0,00556 0,00477 0,00369 0,00348 0,00018 0,00327 0,00329
token F G H I J K L
abs. 009.099 017.998 007.689 008.295 002.578 008.308 006.778
rel. 0,00181 0,00358 0,00153 0,00165 0,00051 0,00165 0,00135
token M N O P Q R S
abs. 011.180 005.879 002.506 007.192 000.225 007.580 023.116
rel. 0,00222 0,00117 0,00050 0,00143 0,00004 0,00151 0,00460
token T U V W X Y Z
abs. 006.439 006.144 012.157 015.938 000.025 000.029 005.657
rel. 0,00128 0,00122 0,00242 0,00317 0,00000 0,00001 0,00113
analyser LetterFrequencyAnalyser
language english
total 5043940
token a b c d e f g
abs. 394.993 069.709 120.655 216.000 629.813 113.613 095.681
rel. 0,07831 0,01382 0,02392 0,04282 0,12487 0,02252 0,01897
token h i j k l m n
abs. 305.292 322.091 004.294 037.988 194.824 127.063 352.083
rel. 0,06053 0,06386 0,00085 0,00753 0,03863 0,02519 0,06980
token o p q r s t u
abs. 385.132 082.140 004.927 290.289 305.490 447.824 141.722
rel. 0,07636 0,01628 0,00098 0,05755 0,06057 0,08878 0,02810
token v w x y z ä ö
abs. 047.739 111.964 008.419 095.931 002.976 000.000 000.000
rel. 0,00946 0,02220 0,00167 0,01902 0,00059 0,00000 0,00000
token ü ß A B C D E
abs. 000.000 000.000 008.515 006.247 005.186 004.156 003.705
rel. 0,00000 0,00000 0,00169 0,00124 0,00103 0,00082 0,00073
token F G H I J K L
abs. 002.583 002.377 010.264 026.620 003.108 000.820 003.845
rel. 0,00051 0,00047 0,00203 0,00528 0,00062 0,00016 0,00076
token M N O P Q R S
abs. 008.657 003.868 002.943 003.237 000.155 002.617 008.010
rel. 0,00172 0,00077 0,00058 0,00064 0,00003 0,00052 0,00159
token T U V W X Y Z
abs. 016.233 000.697 000.818 007.122 000.411 003.053 000.041
rel. 0,00322 0,00014 0,00016 0,00141 0,00008 0,00061 0,00001

Zusätzlich zu den Unigrammen habe ich auch die Bigrammverteilungen ermittelt. Bigramme sind, wie der Name schon sagt, alle Kombinationen aus zwei Buchstaben, wie etwa aa ab ba ac ca ad… Man kann sich Vorstellen, dass sogar bei einer kleinen Zahl von Buchstaben, wie die 57 Buchstaben von eben, sich eine recht große Menge Variationen ergibt (um genau zu sein n!/(n-k!) mit n=57 und k=2, wobei nochmal n dazukommen, weil man ja aa, bb etc. mitberücksichtigen will). Damit der Speicherbedarf auch hier nicht unnötig groß wird, habe ich für die Bigramme keine Groß-/Kleinschreibung unterschieden, sowie das Leerzeichen hinzugefügt, damit auch die Buchstaben am Wortanfang und am Wortende unterschieden werden.

Hier nun die Ergebnisse der Bigramm-Statistiken:

analyser BigrammFrequencyAnalyser
language deutsch
total 4114752
token aa ab ba ac ca ad da
abs. 000.959 012.770 003.780 013.462 000.044 002.390 029.894
rel. 0,00023 0,00310 0,00092 0,00327 0,00001 0,00058 0,00727
token ae ea af fa ag ga ah
abs. 000.145 001.532 005.062 006.119 008.158 005.894 008.242
rel. 0,00004 0,00037 0,00123 0,00149 0,00198 0,00143 0,00200
token ha ai ia aj ja ak ka
abs. 021.111 000.478 001.572 000.121 000.829 001.304 004.913
rel. 0,00513 0,00012 0,00038 0,00003 0,00020 0,00032 0,00119
token al la am ma an na ao
abs. 033.523 008.981 007.619 010.836 042.775 009.799 000.017
rel. 0,00815 0,00218 0,00185 0,00263 0,01040 0,00238 0,00000
token oa ap pa aq qa ar ra
abs. 000.039 001.063 001.586 000.000 000.000 019.763 017.191
rel. 0,00001 0,00026 0,00039 0,00000 0,00000 0,00480 0,00418
token as sa at ta au ua av
abs. 024.777 008.323 017.697 011.399 030.879 000.797 000.557
rel. 0,00602 0,00202 0,00430 0,00277 0,00750 0,00019 0,00014
token va aw wa ax xa ay ya
abs. 000.327 000.029 013.317 000.088 000.021 000.064 000.014
rel. 0,00008 0,00001 0,00324 0,00002 0,00001 0,00002 0,00000
token az za äa öa
abs. 000.519 000.404 000.000 000.001 000.000 000.000 000.000
rel. 0,00013 0,00010 0,00000 0,00000 0,00000 0,00000 0,00000
token üa ßa a a bb bc
abs. 000.000 007.841 000.040 000.000 000.000 000.124 000.026
rel. 0,00000 0,00191 0,00001 0,00000 0,00000 0,00003 0,00001
token cb bd db be eb bf fb
abs. 000.005 000.030 000.121 048.606 012.083 000.062 000.145
rel. 0,00000 0,00001 0,00003 0,01181 0,00294 0,00002 0,00004
token bg gb bh hb bi ib bj
abs. 001.017 000.089 000.518 000.237 003.423 002.470 000.951
rel. 0,00025 0,00002 0,00013 0,00006 0,00083 0,00060 0,00023
token jb bk kb bl lb bm mb
abs. 000.000 000.355 000.137 004.230 009.766 000.026 000.455
rel. 0,00000 0,00009 0,00003 0,00103 0,00237 0,00001 0,00011
token bn nb bo ob bp pb bq
abs. 000.236 002.409 000.592 003.152 000.008 000.001 000.001
rel. 0,00006 0,00059 0,00014 0,00077 0,00000 0,00000 0,00000
token qb br rb bs sb bt tb
abs. 000.000 003.635 005.083 008.341 000.829 002.428 001.302
rel. 0,00000 0,00088 0,00124 0,00203 0,00020 0,00059 0,00032
token bu ub bv vb bw wb bx
abs. 001.183 002.768 000.005 000.001 000.169 000.000 000.000
rel. 0,00029 0,00067 0,00000 0,00000 0,00004 0,00000 0,00000
token xb by yb bz zb äb
abs. 000.000 000.055 000.007 000.341 000.097 000.203 000.083
rel. 0,00000 0,00001 0,00000 0,00008 0,00002 0,00005 0,00002
token öb üb ßb b
abs. 000.074 000.042 000.276 005.838 000.000 000.104 000.000
rel. 0,00002 0,00001 0,00007 0,00142 0,00000 0,00003 0,00000
token b cc cd dc ce ec cf
abs. 000.000 000.022 000.000 000.203 000.094 005.543 000.000
rel. 0,00000 0,00001 0,00000 0,00005 0,00002 0,00135 0,00000
token fc cg gc ch hc ci ic
abs. 000.010 000.000 000.001 142.026 000.030 000.188 060.263
rel. 0,00000 0,00000 0,00000 0,03452 0,00001 0,00005 0,01465
token cj jc ck kc cl lc cm
abs. 000.000 000.000 008.174 000.034 000.065 004.531 000.001
rel. 0,00000 0,00000 0,00199 0,00001 0,00002 0,00110 0,00000
token mc cn nc co oc cp pc
abs. 000.015 000.004 000.636 000.191 006.315 000.002 000.010
rel. 0,00000 0,00000 0,00015 0,00005 0,00153 0,00000 0,00000
token cq qc cr rc cs sc ct
abs. 000.002 000.000 000.045 005.718 000.001 032.142 000.025
rel. 0,00000 0,00000 0,00001 0,00139 0,00000 0,00781 0,00001
token tc cu uc cv vc cw wc
abs. 000.075 000.022 008.714 000.000 000.000 000.000 000.000
rel. 0,00002 0,00001 0,00212 0,00000 0,00000 0,00000 0,00000
token cx xc cy yc cz zc
abs. 000.000 000.006 000.000 000.226 000.002 000.020 000.001
rel. 0,00000 0,00000 0,00000 0,00005 0,00000 0,00000 0,00000
token äc öc üc ßc
abs. 001.504 000.000 000.756 000.000 003.508 000.000 000.053
rel. 0,00037 0,00000 0,00018 0,00000 0,00085 0,00000 0,00001
token c c dd de ed df fd
abs. 000.000 000.000 000.215 110.112 012.164 000.057 000.023
rel. 0,00000 0,00000 0,00005 0,02676 0,00296 0,00001 0,00001
token dg gd dh hd di id dj
abs. 000.085 000.076 000.147 000.394 042.322 004.732 000.013
rel. 0,00002 0,00002 0,00004 0,00010 0,01029 0,00115 0,00000
token jd dk kd dl ld dm md
abs. 000.000 000.037 000.023 002.331 003.482 000.124 000.475
rel. 0,00000 0,00001 0,00001 0,00057 0,00085 0,00003 0,00012
token dn nd do od dp pd dq
abs. 000.961 070.061 002.617 004.497 000.165 000.002 000.003
rel. 0,00023 0,01703 0,00064 0,00109 0,00004 0,00000 0,00000
token qd dr rd ds sd dt td
abs. 000.000 002.879 012.783 001.109 000.843 000.837 000.230
rel. 0,00000 0,00070 0,00311 0,00027 0,00020 0,00020 0,00006
token du ud dv vd dw wd dx
abs. 008.059 000.838 000.048 000.000 000.251 000.000 000.000
rel. 0,00196 0,00020 0,00001 0,00000 0,00006 0,00000 0,00000
token xd dy yd dz zd äd
abs. 000.000 000.065 000.008 000.114 000.062 000.128 000.818
rel. 0,00000 0,00002 0,00000 0,00003 0,00002 0,00003 0,00020
token öd üd ßd d
abs. 000.015 000.136 000.417 000.236 000.000 000.028 000.000
rel. 0,00000 0,00003 0,00010 0,00006 0,00000 0,00001 0,00000
token d ee ef fe eg ge eh
abs. 000.000 002.177 005.029 009.536 018.611 069.917 017.680
rel. 0,00000 0,00053 0,00122 0,00232 0,00452 0,01699 0,00430
token he ei ie ej je ek ke
abs. 053.346 110.609 083.065 000.177 004.946 003.457 016.143
rel. 0,01296 0,02688 0,02019 0,00004 0,00120 0,00084 0,00392
token el le em me en ne eo
abs. 034.093 031.000 024.357 020.784 185.520 052.316 001.104
rel. 0,00829 0,00753 0,00592 0,00505 0,04509 0,01271 0,00027
token oe ep pe eq qe er re
abs. 000.125 000.958 002.062 000.174 000.000 167.314 040.612
rel. 0,00003 0,00023 0,00050 0,00004 0,00000 0,04066 0,00987
token es se et te eu ue ev
abs. 065.137 057.543 016.990 076.764 007.870 003.272 000.451
rel. 0,01583 0,01398 0,00413 0,01866 0,00191 0,00080 0,00011
token ve ew we ex xe ey ye
abs. 011.277 008.444 023.461 000.457 000.058 000.197 000.111
rel. 0,00274 0,00205 0,00570 0,00011 0,00001 0,00005 0,00003
token ez ze äe öe
abs. 001.863 010.662 000.053 000.012 000.020 000.001 000.047
rel. 0,00045 0,00259 0,00001 0,00000 0,00000 0,00000 0,00001
token üe ße e e ff fg
abs. 000.001 001.772 004.905 000.000 000.000 006.602 001.066
rel. 0,00000 0,00043 0,00119 0,00000 0,00000 0,00160 0,00026
token gf fh hf fi if fj jf
abs. 000.455 000.335 000.217 002.961 004.410 000.003 000.000
rel. 0,00011 0,00008 0,00005 0,00072 0,00107 0,00000 0,00000
token fk kf fl lf fm mf fn
abs. 000.124 000.153 002.191 000.605 000.183 000.159 000.546
rel. 0,00003 0,00004 0,00053 0,00015 0,00004 0,00004 0,00013
token nf fo of fp pf fq qf
abs. 004.274 002.622 002.082 000.040 002.450 000.000 000.000
rel. 0,00104 0,00064 0,00051 0,00001 0,00060 0,00000 0,00000
token fr rf fs sf ft tf fu
abs. 003.269 004.756 000.928 000.653 008.510 000.724 001.140
rel. 0,00079 0,00116 0,00023 0,00016 0,00207 0,00018 0,00028
token uf fv vf fw wf fx xf
abs. 012.526 000.019 000.001 000.105 000.000 000.000 000.001
rel. 0,00304 0,00000 0,00000 0,00003 0,00000 0,00000 0,00000
token fy yf fz zf äf
abs. 000.000 000.002 000.350 000.029 001.376 000.895 000.127
rel. 0,00000 0,00000 0,00009 0,00001 0,00033 0,00022 0,00003
token öf üf ßf f f
abs. 000.522 006.339 000.150 000.000 000.036 000.000 000.000
rel. 0,00013 0,00154 0,00004 0,00000 0,00001 0,00000 0,00000
token gg gh hg gi ig gj jg
abs. 000.150 000.100 000.488 004.202 021.705 000.023 000.000
rel. 0,00004 0,00002 0,00012 0,00102 0,00527 0,00001 0,00000
token gk kg gl lg gm mg gn
abs. 002.162 000.305 007.258 003.500 000.163 000.370 001.534
rel. 0,00053 0,00007 0,00176 0,00085 0,00004 0,00009 0,00037
token ng go og gp pg gq qg
abs. 038.866 000.499 002.560 000.005 000.000 000.001 000.000
rel. 0,00945 0,00012 0,00062 0,00000 0,00000 0,00000 0,00000
token gr rg gs sg gt tg gu
abs. 006.191 006.364 003.583 001.870 006.446 001.533 004.245
rel. 0,00150 0,00155 0,00087 0,00045 0,00157 0,00037 0,00103
token ug gv vg gw wg gx xg
abs. 004.334 000.006 000.019 000.064 000.000 000.000 000.000
rel. 0,00105 0,00000 0,00000 0,00002 0,00000 0,00000 0,00000
token gy yg gz zg äg
abs. 000.011 000.008 000.030 000.079 000.459 000.637 000.212
rel. 0,00000 0,00000 0,00001 0,00002 0,00011 0,00015 0,00005
token ög üg ßg g g
abs. 002.002 000.436 000.775 000.000 000.064 000.000 000.000
rel. 0,00049 0,00011 0,00019 0,00000 0,00002 0,00000 0,00000
token hh hi ih hj jh hk kh
abs. 000.549 011.252 011.758 000.045 000.000 002.508 000.108
rel. 0,00013 0,00273 0,00286 0,00001 0,00000 0,00061 0,00003
token hl lh hm mh hn nh ho
abs. 009.194 000.790 005.819 000.111 006.972 004.139 003.473
rel. 0,00223 0,00019 0,00141 0,00003 0,00169 0,00101 0,00084
token oh hp ph hq qh hr rh
abs. 004.275 000.015 001.617 000.003 000.000 020.640 005.711
rel. 0,00104 0,00000 0,00039 0,00000 0,00000 0,00502 0,00139
token hs sh ht th hu uh hv
abs. 003.383 000.720 028.383 004.109 002.906 001.453 000.070
rel. 0,00082 0,00017 0,00690 0,00100 0,00071 0,00035 0,00002
token vh hw wh hx xh hy yh
abs. 000.000 002.644 000.000 000.000 000.001 000.427 000.002
rel. 0,00000 0,00064 0,00000 0,00000 0,00000 0,00010 0,00000
token hz zh äh öh
abs. 000.269 000.031 003.358 002.338 002.543 000.642 000.624
rel. 0,00007 0,00001 0,00082 0,00057 0,00062 0,00016 0,00015
token üh ßh h h ii ij
abs. 003.052 000.000 000.355 000.000 000.000 000.021 000.010
rel. 0,00074 0,00000 0,00009 0,00000 0,00000 0,00001 0,00000
token ji ik ki il li im mi
abs. 000.003 002.445 000.262 010.644 029.165 009.152 014.258
rel. 0,00000 0,00059 0,00006 0,00259 0,00709 0,00222 0,00347
token in ni io oi ip pi iq
abs. 097.166 020.518 004.514 000.166 001.147 002.538 000.026
rel. 0,02361 0,00499 0,00110 0,00004 0,00028 0,00062 0,00001
token qi ir ri is si it ti
abs. 000.000 013.084 018.735 034.455 028.732 037.733 018.644
rel. 0,00000 0,00318 0,00455 0,00837 0,00698 0,00917 0,00453
token iu ui iv vi iw wi ix
abs. 000.461 000.395 002.550 003.160 000.044 017.838 000.092
rel. 0,00011 0,00010 0,00062 0,00077 0,00001 0,00434 0,00002
token xi iy yi iz zi äi
abs. 000.621 000.000 000.014 000.930 004.527 000.033 000.046
rel. 0,00015 0,00000 0,00000 0,00023 0,00110 0,00001 0,00001
token öi üi ßi i
abs. 000.119 000.000 000.000 000.000 002.319 000.612 000.000
rel. 0,00003 0,00000 0,00000 0,00000 0,00056 0,00015 0,00000
token i jj jk kj jl lj jm
abs. 000.000 000.000 000.000 000.000 000.000 000.015 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token mj jn nj jo oj jp pj
abs. 000.049 000.000 000.055 000.095 000.025 000.000 000.000
rel. 0,00001 0,00000 0,00001 0,00002 0,00001 0,00000 0,00000
token jq qj jr rj js sj jt
abs. 000.000 000.000 000.000 000.104 000.000 000.250 000.000
rel. 0,00000 0,00000 0,00000 0,00003 0,00000 0,00006 0,00000
token tj ju uj jv vj jw wj
abs. 000.005 000.386 000.016 000.000 000.000 000.000 000.001
rel. 0,00000 0,00009 0,00000 0,00000 0,00000 0,00000 0,00000
token jx xj jy yj jz zj
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.102
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00002
token äj öj üj ßj
abs. 000.000 000.001 000.000 000.069 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00002 0,00000 0,00000 0,00000
token j j kk kl lk km mk
abs. 000.000 000.000 000.147 004.779 001.567 000.173 000.259
rel. 0,00000 0,00000 0,00004 0,00116 0,00038 0,00004 0,00006
token kn nk ko ok kp pk kq
abs. 000.702 005.225 003.562 000.849 000.005 000.004 000.000
rel. 0,00017 0,00127 0,00087 0,00021 0,00000 0,00000 0,00000
token qk kr rk ks sk kt tk
abs. 000.000 001.778 007.996 001.601 000.801 006.241 000.136
rel. 0,00000 0,00043 0,00194 0,00039 0,00019 0,00152 0,00003
token ku uk kv vk kw wk kx
abs. 001.672 000.733 000.025 000.001 000.164 000.000 000.000
rel. 0,00041 0,00018 0,00001 0,00000 0,00004 0,00000 0,00000
token xk ky yk kz zk äk
abs. 000.003 000.015 000.007 000.228 000.011 000.226 000.009
rel. 0,00000 0,00000 0,00000 0,00006 0,00000 0,00005 0,00000
token ök ük ßk k
abs. 002.122 000.036 000.609 000.002 000.000 000.013 000.000
rel. 0,00052 0,00001 0,00015 0,00000 0,00000 0,00000 0,00000
token k ll lm ml ln nl lo
abs. 000.000 022.903 001.327 001.539 002.096 002.223 005.118
rel. 0,00000 0,00557 0,00032 0,00037 0,00051 0,00054 0,00124
token ol lp pl lq ql lr rl
abs. 011.658 000.188 000.402 000.001 000.000 000.160 005.459
rel. 0,00283 0,00005 0,00010 0,00000 0,00000 0,00004 0,00133
token ls sl lt tl lu ul lv
abs. 014.663 000.564 015.387 004.093 005.311 002.638 000.260
rel. 0,00356 0,00014 0,00374 0,00099 0,00129 0,00064 0,00006
token vl lw wl lx xl ly yl
abs. 000.002 000.163 000.001 000.000 000.000 000.202 000.030
rel. 0,00000 0,00004 0,00000 0,00000 0,00000 0,00005 0,00001
token lz zl äl öl
abs. 000.415 000.632 002.302 002.157 000.563 000.507 001.265
rel. 0,00010 0,00015 0,00056 0,00052 0,00014 0,00012 0,00031
token ül ßl l l mm mn
abs. 000.966 000.000 000.371 000.000 000.000 010.147 000.263
rel. 0,00023 0,00000 0,00009 0,00000 0,00000 0,00247 0,00006
token nm mo om mp pm mq qm
abs. 002.180 001.668 005.554 002.441 000.003 000.001 000.000
rel. 0,00053 0,00041 0,00135 0,00059 0,00000 0,00000 0,00000
token mr rm ms sm mt tm mu
abs. 000.094 004.022 001.175 001.669 002.762 000.361 004.052
rel. 0,00002 0,00098 0,00029 0,00041 0,00067 0,00009 0,00098
token um mv vm mw wm mx xm
abs. 008.230 000.018 000.001 000.087 000.001 000.000 000.001
rel. 0,00200 0,00000 0,00000 0,00002 0,00000 0,00000 0,00000
token my ym mz zm äm
abs. 000.032 000.111 000.056 000.054 000.860 000.982 001.827
rel. 0,00001 0,00003 0,00001 0,00001 0,00021 0,00024 0,00044
token öm üm ßm m m
abs. 000.097 001.365 000.306 000.000 000.060 000.000 000.000
rel. 0,00002 0,00033 0,00007 0,00000 0,00001 0,00000 0,00000
token nn no on np pn nq qn
abs. 021.409 005.607 020.037 000.153 000.039 000.015 000.000
rel. 0,00520 0,00136 0,00487 0,00004 0,00001 0,00000 0,00000
token nr rn ns sn nt tn nu
abs. 000.722 010.444 023.749 000.128 022.562 001.719 010.154
rel. 0,00018 0,00254 0,00577 0,00003 0,00548 0,00042 0,00247
token un nv vn nw wn nx xn
abs. 070.942 000.554 000.001 001.520 000.000 000.002 000.000
rel. 0,01724 0,00013 0,00000 0,00037 0,00000 0,00000 0,00000
token ny yn nz zn än
abs. 000.019 000.653 007.711 000.027 001.577 004.993 000.299
rel. 0,00000 0,00016 0,00187 0,00001 0,00038 0,00121 0,00007
token ön ün ßn n n
abs. 003.107 001.157 002.309 000.000 000.040 000.000 000.000
rel. 0,00076 0,00028 0,00056 0,00000 0,00001 0,00000 0,00000
token oo op po oq qo or ro
abs. 000.119 001.580 001.409 000.000 000.000 018.230 004.763
rel. 0,00003 0,00038 0,00034 0,00000 0,00000 0,00443 0,00116
token os so ot to ou uo ov
abs. 004.099 018.474 003.312 001.785 000.272 000.037 000.379
rel. 0,00100 0,00449 0,00080 0,00043 0,00007 0,00001 0,00009
token vo ow wo ox xo oy yo
abs. 014.390 000.575 006.422 000.019 000.004 000.033 000.005
rel. 0,00350 0,00014 0,00156 0,00000 0,00000 0,00001 0,00000
token oz zo äo öo
abs. 001.060 000.621 000.000 000.000 000.000 000.000 000.000
rel. 0,00026 0,00015 0,00000 0,00000 0,00000 0,00000 0,00000
token üo ßo o o pp pq
abs. 000.000 002.687 000.007 000.000 000.000 000.915 000.000
rel. 0,00000 0,00065 0,00000 0,00000 0,00000 0,00022 0,00000
token qp pr rp ps sp pt tp
abs. 000.000 004.586 000.552 000.225 004.712 001.884 000.103
rel. 0,00000 0,00111 0,00013 0,00005 0,00115 0,00046 0,00003
token pu up pv vp pw wp px
abs. 000.578 001.709 000.001 000.000 000.000 000.000 000.000
rel. 0,00014 0,00042 0,00000 0,00000 0,00000 0,00000 0,00000
token xp py yp pz zp äp
abs. 000.080 000.002 000.191 000.302 000.019 000.479 000.006
rel. 0,00002 0,00000 0,00005 0,00007 0,00000 0,00012 0,00000
token öp üp ßp p
abs. 000.051 000.269 000.053 000.266 000.000 000.013 000.000
rel. 0,00001 0,00007 0,00001 0,00006 0,00000 0,00000 0,00000
token p qq qr rq qs sq qt
abs. 000.000 000.000 000.000 000.039 000.000 000.028 000.000
rel. 0,00000 0,00000 0,00000 0,00001 0,00000 0,00001 0,00000
token tq qu uq qv vq qw wq
abs. 000.018 000.461 000.001 000.000 000.000 000.000 000.000
rel. 0,00000 0,00011 0,00000 0,00000 0,00000 0,00000 0,00000
token qx xq qy yq qz zq
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token äq öq üq ßq
abs. 000.014 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token q q rr rs sr rt tr
abs. 000.000 000.000 003.175 018.467 000.421 016.440 009.156
rel. 0,00000 0,00000 0,00077 0,00449 0,00010 0,00400 0,00223
token ru ur rv vr rw wr rx
abs. 009.122 017.303 001.121 000.009 002.772 000.001 000.110
rel. 0,00222 0,00421 0,00027 0,00000 0,00067 0,00000 0,00003
token xr ry yr rz zr är
abs. 000.000 000.008 000.161 003.621 000.018 002.774 003.101
rel. 0,00000 0,00000 0,00004 0,00088 0,00000 0,00067 0,00075
token ör ür ßr r
abs. 001.063 001.998 004.265 007.682 000.000 000.067 000.000
rel. 0,00026 0,00049 0,00104 0,00187 0,00000 0,00002 0,00000
token r ss st ts su us sv
abs. 000.000 012.973 053.791 010.925 002.914 014.621 000.499
rel. 0,00000 0,00315 0,01307 0,00266 0,00071 0,00355 0,00012
token vs sw ws sx xs sy ys
abs. 000.003 001.167 000.030 000.000 000.007 000.733 000.862
rel. 0,00000 0,00028 0,00001 0,00000 0,00000 0,00018 0,00021
token sz zs äs ös
abs. 001.228 000.148 000.622 000.555 000.294 000.984 000.178
rel. 0,00030 0,00004 0,00015 0,00013 0,00007 0,00024 0,00004
token üs ßs s s tt tu
abs. 001.209 000.000 000.099 000.000 000.000 011.337 006.623
rel. 0,00029 0,00000 0,00002 0,00000 0,00000 0,00276 0,00161
token ut tv vt tw wt tx xt
abs. 007.820 000.235 000.006 003.570 000.015 000.000 000.171
rel. 0,00190 0,00006 0,00000 0,00087 0,00000 0,00000 0,00004
token ty yt tz zt ät
abs. 000.033 000.175 009.819 003.505 004.362 004.117 000.260
rel. 0,00001 0,00004 0,00239 0,00085 0,00106 0,00100 0,00006
token öt üt ßt t t
abs. 000.669 001.446 001.067 000.000 005.454 000.000 000.000
rel. 0,00016 0,00035 0,00026 0,00000 0,00133 0,00000 0,00000
token uu uv vu uw wu ux xu
abs. 001.071 000.205 000.017 000.235 005.037 000.027 000.014
rel. 0,00026 0,00005 0,00000 0,00006 0,00122 0,00001 0,00000
token uy yu uz zu äu
abs. 000.002 000.002 000.221 022.661 000.047 001.746 000.000
rel. 0,00000 0,00000 0,00005 0,00551 0,00001 0,00042 0,00000
token öu üu ßu u u
abs. 000.000 000.003 000.000 007.210 000.096 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00175 0,00002 0,00000 0,00000
token vv vw wv vx xv vy yv
abs. 000.000 000.000 000.000 000.000 000.001 000.002 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token vz zv äv öv
abs. 000.000 000.020 000.018 000.000 000.275 000.006 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00007 0,00000 0,00000
token üv ßv v v ww wx
abs. 000.000 000.000 000.072 000.000 000.000 000.001 000.000
rel. 0,00000 0,00000 0,00002 0,00000 0,00000 0,00000 0,00000
token xw wy yw wz zw äw
abs. 000.001 000.001 000.000 000.000 002.724 002.223 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00066 0,00054 0,00000
token öw üw ßw w
abs. 000.282 000.023 001.663 000.000 000.000 000.010 000.000
rel. 0,00007 0,00001 0,00040 0,00000 0,00000 0,00000 0,00000
token w xx xy yx xz zx
abs. 000.000 000.000 000.001 000.001 000.028 000.000 000.001
rel. 0,00000 0,00000 0,00000 0,00000 0,00001 0,00000 0,00000
token äx öx üx ßx
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token x x yy yz zy äy
abs. 000.000 000.000 000.000 000.002 000.003 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token öy üy ßy y
abs. 000.000 000.000 000.000 000.000 000.003 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token y zz äz öz
abs. 000.000 000.039 000.408 000.009 000.152 000.001 000.268
rel. 0,00000 0,00001 0,00010 0,00000 0,00004 0,00000 0,00007
token üz ßz z z ää äö
abs. 000.000 000.000 000.012 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token öä äü üä äß ßä ä ä
abs. 000.000 000.000 000.000 000.870 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00021 0,00000 0,00000 0,00000
token öö öü üö öß ßö ö ö
abs. 000.000 000.000 000.000 000.682 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00017 0,00000 0,00000 0,00000
token üü üß ßü ü ü ßß ß
abs. 000.000 000.594 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00014 0,00000 0,00000 0,00000 0,00000 0,00000
token ß
abs. 000.000 000.000
rel. 0,00000 0,00000
analyser BigrammFrequencyAnalyser
language english
total 3854701
token aa ab ba ac ca ad da
abs. 000.005 008.608 004.668 014.817 014.406 021.033 005.373
rel. 0,00000 0,00223 0,00121 0,00384 0,00374 0,00546 0,00139
token ae ea af fa ag ga ah
abs. 000.628 028.550 003.304 007.334 006.813 005.336 000.356
rel. 0,00016 0,00741 0,00086 0,00190 0,00177 0,00138 0,00009
token ha ai ia aj ja ak ka
abs. 049.670 016.605 005.315 000.136 000.226 005.583 000.268
rel. 0,01289 0,00431 0,00138 0,00004 0,00006 0,00145 0,00007
token al la am ma an na ao
abs. 027.313 016.001 012.182 019.433 082.334 006.554 000.101
rel. 0,00709 0,00415 0,00316 0,00504 0,02136 0,00170 0,00003
token oa ap pa aq qa ar ra
abs. 002.460 006.465 009.410 000.017 000.000 037.814 018.218
rel. 0,00064 0,00168 0,00244 0,00000 0,00000 0,00981 0,00473
token as sa at ta au ua av
abs. 040.436 012.015 050.467 015.157 004.199 003.195 011.087
rel. 0,01049 0,00312 0,01309 0,00393 0,00109 0,00083 0,00288
token va aw wa ax xa ay ya
abs. 003.445 003.681 025.698 000.257 000.954 011.113 000.464
rel. 0,00089 0,00095 0,00667 0,00007 0,00025 0,00288 0,00012
token az za äa öa
abs. 000.422 000.842 000.000 000.000 000.000 000.000 000.000
rel. 0,00011 0,00022 0,00000 0,00000 0,00000 0,00000 0,00000
token üa ßa a a bb bc
abs. 000.000 000.000 000.000 000.000 000.000 000.498 000.006
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00013 0,00000
token cb bd db be eb bf fb
abs. 000.001 000.041 000.026 023.786 000.674 000.001 000.002
rel. 0,00000 0,00001 0,00001 0,00617 0,00017 0,00000 0,00000
token bg gb bh hb bi ib bj
abs. 000.002 000.093 000.016 000.189 002.668 002.297 000.699
rel. 0,00000 0,00002 0,00000 0,00005 0,00069 0,00060 0,00018
token jb bk kb bl lb bm mb
abs. 000.000 000.000 000.013 008.941 000.184 000.077 002.637
rel. 0,00000 0,00000 0,00000 0,00232 0,00005 0,00002 0,00068
token bn nb bo ob bp pb bq
abs. 000.021 000.127 007.713 002.651 000.000 000.019 000.000
rel. 0,00001 0,00003 0,00200 0,00069 0,00000 0,00000 0,00000
token qb br rb bs sb bt tb
abs. 000.000 004.037 000.701 001.295 000.468 000.763 000.039
rel. 0,00000 0,00105 0,00018 0,00034 0,00012 0,00020 0,00001
token bu ub bv vb bw wb bx
abs. 008.247 002.682 000.077 000.000 000.005 000.029 000.000
rel. 0,00214 0,00070 0,00002 0,00000 0,00000 0,00001 0,00000
token xb by yb bz zb äb
abs. 000.000 005.488 000.418 000.000 000.001 000.000 000.000
rel. 0,00000 0,00142 0,00011 0,00000 0,00000 0,00000 0,00000
token öb üb ßb b
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token b cc cd dc ce ec cf
abs. 000.000 002.584 000.014 000.034 021.156 012.049 000.000
rel. 0,00000 0,00067 0,00000 0,00001 0,00549 0,00313 0,00000
token fc cg gc ch hc ci ic
abs. 000.001 000.000 000.000 020.009 000.009 005.852 017.345
rel. 0,00000 0,00000 0,00000 0,00519 0,00000 0,00152 0,00450
token cj jc ck kc cl lc cm
abs. 000.000 000.000 007.549 000.006 004.270 000.295 000.000
rel. 0,00000 0,00000 0,00196 0,00000 0,00111 0,00008 0,00000
token mc cn nc co oc cp pc
abs. 000.020 000.012 012.227 022.943 003.712 000.000 000.004
rel. 0,00001 0,00000 0,00317 0,00595 0,00096 0,00000 0,00000
token cq qc cr rc cs sc ct
abs. 000.318 000.000 004.525 003.404 000.187 003.593 009.788
rel. 0,00008 0,00000 0,00117 0,00088 0,00005 0,00093 0,00254
token tc cu uc cv vc cw wc
abs. 001.546 003.984 006.084 000.000 000.000 000.028 000.121
rel. 0,00040 0,00103 0,00158 0,00000 0,00000 0,00001 0,00003
token cx xc cy yc cz zc
abs. 000.000 001.257 001.263 000.061 000.001 000.005 000.000
rel. 0,00000 0,00033 0,00033 0,00002 0,00000 0,00000 0,00000
token äc öc üc ßc
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token c c dd de ed df fd
abs. 000.000 000.000 001.971 025.083 053.677 000.147 000.001
rel. 0,00000 0,00000 0,00051 0,00651 0,01393 0,00004 0,00000
token dg gd dh hd di id dj
abs. 001.027 000.064 000.068 000.083 014.223 013.505 000.092
rel. 0,00027 0,00002 0,00002 0,00002 0,00369 0,00350 0,00002
token jd dk kd dl ld dm md
abs. 000.000 000.038 000.002 001.774 014.067 000.583 000.001
rel. 0,00000 0,00001 0,00000 0,00046 0,00365 0,00015 0,00000
token dn nd do od dp pd dq
abs. 001.736 062.507 009.862 006.096 000.021 000.004 000.066
rel. 0,00045 0,01622 0,00256 0,00158 0,00001 0,00000 0,00002
token qd dr rd ds sd dt td
abs. 000.000 003.802 007.297 004.908 000.127 000.057 000.014
rel. 0,00000 0,00099 0,00189 0,00127 0,00003 0,00001 0,00000
token du ud dv vd dw wd dx
abs. 002.834 002.500 000.855 000.000 000.196 000.315 000.000
rel. 0,00074 0,00065 0,00022 0,00000 0,00005 0,00008 0,00000
token xd dy yd dz zd äd
abs. 000.000 002.498 000.251 000.002 000.000 000.000 000.000
rel. 0,00000 0,00065 0,00007 0,00000 0,00000 0,00000 0,00000
token öd üd ßd d
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token d ee ef fe eg ge eh
abs. 000.000 018.107 005.715 009.124 002.785 012.560 000.884
rel. 0,00000 0,00470 0,00148 0,00237 0,00072 0,00326 0,00023
token he ei ie ej je ek ke
abs. 141.242 006.946 012.500 000.144 001.251 000.767 012.524
rel. 0,03664 0,00180 0,00324 0,00004 0,00032 0,00020 0,00325
token el le em me en ne eo
abs. 020.230 032.648 012.519 033.276 053.617 029.781 001.646
rel. 0,00525 0,00847 0,00325 0,00863 0,01391 0,00773 0,00043
token oe ep pe eq qe er re
abs. 001.126 005.691 015.289 001.186 000.000 086.349 066.975
rel. 0,00029 0,00148 0,00397 0,00031 0,00000 0,02240 0,01737
token es se et te eu ue ev
abs. 039.878 033.051 017.720 039.233 000.427 003.917 010.010
rel. 0,01035 0,00857 0,00460 0,01018 0,00011 0,00102 0,00260
token ve ew we ex xe ey ye
abs. 035.091 004.245 017.181 006.629 000.623 009.139 004.267
rel. 0,00910 0,00110 0,00446 0,00172 0,00016 0,00237 0,00111
token ez ze äe öe
abs. 000.124 001.113 000.000 000.000 000.000 000.000 000.000
rel. 0,00003 0,00029 0,00000 0,00000 0,00000 0,00000 0,00000
token üe ße e e ff fg
abs. 000.000 000.000 000.000 000.000 000.000 005.003 000.002
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00130 0,00000
token gf fh hf fi if fj jf
abs. 000.009 000.001 000.110 008.679 007.551 000.000 000.000
rel. 0,00000 0,00000 0,00003 0,00225 0,00196 0,00000 0,00000
token fk kf fl lf fm mf fn
abs. 000.000 000.167 002.491 003.403 000.001 000.254 000.020
rel. 0,00000 0,00004 0,00065 0,00088 0,00000 0,00007 0,00001
token nf fo of fp pf fq qf
abs. 001.670 018.309 040.619 000.003 000.032 000.000 000.000
rel. 0,00043 0,00475 0,01054 0,00000 0,00001 0,00000 0,00000
token fr rf fs sf ft tf fu
abs. 007.677 001.288 000.104 000.519 004.539 000.321 003.694
rel. 0,00199 0,00033 0,00003 0,00013 0,00118 0,00008 0,00096
token uf fv vf fw wf fx xf
abs. 001.077 000.000 000.000 000.015 000.105 000.000 000.007
rel. 0,00028 0,00000 0,00000 0,00000 0,00003 0,00000 0,00000
token fy yf fz zf äf
abs. 000.205 000.055 000.000 000.000 000.000 000.000 000.000
rel. 0,00005 0,00001 0,00000 0,00000 0,00000 0,00000 0,00000
token öf üf ßf f f
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token gg gh hg gi ig gj jg
abs. 001.209 013.561 000.001 004.756 010.797 000.000 000.000
rel. 0,00031 0,00352 0,00000 0,00123 0,00280 0,00000 0,00000
token gk kg gl lg gm mg gn
abs. 000.000 000.024 002.776 000.149 000.099 000.000 001.531
rel. 0,00000 0,00001 0,00072 0,00004 0,00003 0,00000 0,00040
token ng go og gp pg gq qg
abs. 042.581 006.762 001.369 000.000 000.000 000.000 000.000
rel. 0,01105 0,00175 0,00036 0,00000 0,00000 0,00000 0,00000
token gr rg gs sg gt tg gu
abs. 006.003 002.520 002.175 000.179 000.951 000.024 002.488
rel. 0,00156 0,00065 0,00056 0,00005 0,00025 0,00001 0,00065
token ug gv vg gw wg gx xg
abs. 006.674 000.002 000.000 000.092 000.004 000.000 000.000
rel. 0,00173 0,00000 0,00000 0,00002 0,00000 0,00000 0,00000
token gy yg gz zg äg
abs. 000.349 000.026 000.001 000.001 000.000 000.000 000.000
rel. 0,00009 0,00001 0,00000 0,00000 0,00000 0,00000 0,00000
token ög üg ßg g g
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token hh hi ih hj jh hk kh
abs. 000.015 043.257 000.024 000.000 000.000 000.016 000.210
rel. 0,00000 0,01122 0,00001 0,00000 0,00000 0,00000 0,00005
token hl lh hm mh hn nh ho
abs. 000.344 000.025 000.506 000.012 000.277 000.378 020.781
rel. 0,00009 0,00001 0,00013 0,00000 0,00007 0,00010 0,00539
token oh hp ph hq qh hr rh
abs. 000.328 000.007 001.312 000.054 000.000 002.907 000.658
rel. 0,00009 0,00000 0,00034 0,00001 0,00000 0,00075 0,00017
token hs sh ht th hu uh hv
abs. 000.473 017.342 008.812 135.755 003.352 000.027 000.001
rel. 0,00012 0,00450 0,00229 0,03522 0,00087 0,00001 0,00000
token vh hw wh hx xh hy yh
abs. 000.000 000.088 018.831 000.000 000.157 001.335 000.083
rel. 0,00000 0,00002 0,00489 0,00000 0,00004 0,00035 0,00002
token hz zh äh öh
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token üh ßh h h ii ij
abs. 000.000 000.000 000.000 000.000 000.000 000.014 000.006
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token ji ik ki il li im mi
abs. 000.058 002.313 004.492 018.179 021.349 015.251 011.498
rel. 0,00002 0,00060 0,00117 0,00472 0,00554 0,00396 0,00298
token in ni io oi ip pi iq
abs. 090.027 009.427 016.521 003.687 002.588 004.792 000.117
rel. 0,02336 0,00245 0,00429 0,00096 0,00067 0,00124 0,00003
token qi ir ri is si it ti
abs. 000.000 013.290 023.327 041.679 015.812 041.908 028.643
rel. 0,00000 0,00345 0,00605 0,01081 0,00410 0,01087 0,00743
token iu ui iv vi iw wi ix
abs. 000.579 003.660 007.557 006.807 000.007 018.386 000.781
rel. 0,00015 0,00095 0,00196 0,00177 0,00000 0,00477 0,00020
token xi iy yi iz zi äi
abs. 000.638 000.000 001.457 001.702 000.175 000.000 000.000
rel. 0,00017 0,00000 0,00038 0,00044 0,00005 0,00000 0,00000
token öi üi ßi i
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token i jj jk kj jl lj jm
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token mj jn nj jo oj jp pj
abs. 000.000 000.000 000.497 000.918 000.092 000.000 000.001
rel. 0,00000 0,00000 0,00013 0,00024 0,00002 0,00000 0,00000
token jq qj jr rj js sj jt
abs. 000.000 000.000 000.000 000.008 000.000 000.005 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token tj ju uj jv vj jw wj
abs. 000.000 001.837 000.001 000.000 000.000 000.000 000.000
rel. 0,00000 0,00048 0,00000 0,00000 0,00000 0,00000 0,00000
token jx xj jy yj jz zj
abs. 000.000 000.000 000.001 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token äj öj üj ßj
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token j j kk kl lk km mk
abs. 000.000 000.000 000.005 000.732 001.435 000.279 000.000
rel. 0,00000 0,00000 0,00000 0,00019 0,00037 0,00007 0,00000
token kn nk ko ok kp pk kq
abs. 003.590 003.697 000.266 004.773 000.011 000.014 000.000
rel. 0,00093 0,00096 0,00007 0,00124 0,00000 0,00000 0,00000
token qk kr rk ks sk kt tk
abs. 000.000 000.023 003.446 002.467 002.203 000.017 000.004
rel. 0,00000 0,00001 0,00089 0,00064 0,00057 0,00000 0,00000
token ku uk kv vk kw wk kx
abs. 000.268 000.206 000.000 000.000 000.087 000.095 000.000
rel. 0,00007 0,00005 0,00000 0,00000 0,00002 0,00002 0,00000
token xk ky yk kz zk äk
abs. 000.000 000.298 000.004 000.000 000.000 000.000 000.000
rel. 0,00000 0,00008 0,00000 0,00000 0,00000 0,00000 0,00000
token ök ük ßk k
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token k ll lm ml ln nl lo
abs. 000.000 027.601 001.401 000.224 000.117 002.896 015.362
rel. 0,00000 0,00716 0,00036 0,00006 0,00003 0,00075 0,00399
token ol lp pl lq ql lr rl
abs. 011.614 000.821 007.947 000.002 000.000 000.336 002.982
rel. 0,00301 0,00021 0,00206 0,00000 0,00000 0,00009 0,00077
token ls sl lt tl lu ul lv
abs. 003.362 002.535 004.657 005.677 002.975 014.695 001.039
rel. 0,00087 0,00066 0,00121 0,00147 0,00077 0,00381 0,00027
token vl lw wl lx xl ly yl
abs. 000.001 000.775 000.675 000.000 000.000 016.263 000.583
rel. 0,00000 0,00020 0,00018 0,00000 0,00000 0,00422 0,00015
token lz zl äl öl
abs. 000.001 000.108 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00003 0,00000 0,00000 0,00000 0,00000 0,00000
token ül ßl l l mm mn
abs. 000.000 000.000 000.000 000.000 000.000 002.347 000.357
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00061 0,00009
token nm mo om mp pm mq qm
abs. 000.473 013.555 024.297 006.602 000.042 000.000 000.000
rel. 0,00012 0,00352 0,00630 0,00171 0,00001 0,00000 0,00000
token mr rm ms sm mt tm mu
abs. 000.020 004.361 002.868 002.016 000.036 000.540 004.211
rel. 0,00001 0,00113 0,00074 0,00052 0,00001 0,00014 0,00109
token um mv vm mw wm mx xm
abs. 003.731 000.042 000.012 000.003 000.010 000.000 000.000
rel. 0,00097 0,00001 0,00000 0,00000 0,00000 0,00000 0,00000
token my ym mz zm äm
abs. 005.734 000.438 000.000 000.000 000.000 000.000 000.000
rel. 0,00149 0,00011 0,00000 0,00000 0,00000 0,00000 0,00000
token öm üm ßm m m
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token nn no on np pn nq qn
abs. 003.026 021.039 057.375 000.170 000.026 000.402 000.000
rel. 0,00079 0,00546 0,01488 0,00004 0,00001 0,00010 0,00000
token nr rn ns sn nt tn nu
abs. 000.253 006.600 013.187 000.862 032.332 000.544 002.176
rel. 0,00007 0,00171 0,00342 0,00022 0,00839 0,00014 0,00056
token un nv vn nw wn nx xn
abs. 015.954 001.682 000.000 000.277 004.653 000.214 000.000
rel. 0,00414 0,00044 0,00000 0,00007 0,00121 0,00006 0,00000
token ny yn nz zn än
abs. 005.009 000.210 000.039 000.001 000.000 000.000 000.000
rel. 0,00130 0,00005 0,00001 0,00000 0,00000 0,00000 0,00000
token ön ün ßn n n
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token oo op po oq qo or ro
abs. 013.746 006.833 010.789 000.064 000.000 040.158 023.420
rel. 0,00357 0,00177 0,00280 0,00002 0,00000 0,01042 0,00608
token os so ot to ou uo ov
abs. 010.360 015.849 018.728 048.952 053.493 000.248 006.321
rel. 0,00269 0,00411 0,00486 0,01270 0,01388 0,00006 0,00164
token vo ow wo ox xo oy yo
abs. 002.012 017.670 011.166 000.326 000.030 001.583 013.681
rel. 0,00052 0,00458 0,00290 0,00008 0,00001 0,00041 0,00355
token oz zo äo öo
abs. 000.125 000.055 000.000 000.000 000.000 000.000 000.000
rel. 0,00003 0,00001 0,00000 0,00000 0,00000 0,00000 0,00000
token üo ßo o o pp pq
abs. 000.000 000.000 000.000 000.000 000.000 005.016 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00130 0,00000
token qp pr rp ps sp pt tp
abs. 000.000 011.498 001.156 001.834 006.326 003.012 000.032
rel. 0,00000 0,00298 0,00030 0,00048 0,00164 0,00078 0,00001
token pu up pv vp pw wp px
abs. 003.144 006.941 000.000 000.000 000.045 000.051 000.000
rel. 0,00082 0,00180 0,00000 0,00000 0,00001 0,00001 0,00000
token xp py yp pz zp äp
abs. 001.913 000.561 000.328 000.001 000.000 000.000 000.000
rel. 0,00050 0,00015 0,00009 0,00000 0,00000 0,00000 0,00000
token öp üp ßp p
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token p qq qr rq qs sq qt
abs. 000.000 000.000 000.000 000.012 000.000 000.281 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00007 0,00000
token tq qu uq qv vq qw wq
abs. 000.000 004.919 000.009 000.000 000.000 000.000 000.000
rel. 0,00000 0,00128 0,00000 0,00000 0,00000 0,00000 0,00000
token qx xq qy yq qz zq
abs. 000.000 000.018 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token äq öq üq ßq
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token q q rr rs sr rt tr
abs. 000.000 000.000 005.487 015.253 000.045 011.535 012.526
rel. 0,00000 0,00000 0,00142 0,00396 0,00001 0,00299 0,00325
token ru ur rv vr rw wr rx
abs. 004.137 020.440 001.743 000.021 000.572 001.255 000.000
rel. 0,00107 0,00530 0,00045 0,00001 0,00015 0,00033 0,00000
token xr ry yr rz zr är
abs. 000.000 010.101 000.164 000.000 000.000 000.000 000.000
rel. 0,00000 0,00262 0,00004 0,00000 0,00000 0,00000 0,00000
token ör ür ßr r
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token r ss st ts su us sv
abs. 000.000 014.489 035.201 008.365 009.926 016.981 000.025
rel. 0,00000 0,00376 0,00913 0,00217 0,00258 0,00441 0,00001
token vs sw ws sx xs sy ys
abs. 000.002 001.785 001.118 000.000 000.000 000.901 003.507
rel. 0,00000 0,00046 0,00029 0,00000 0,00000 0,00023 0,00091
token sz zs äs ös
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token üs ßs s s tt tu
abs. 000.000 000.000 000.000 000.000 000.000 009.575 006.789
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00248 0,00176
token ut tv vt tw wt tx xt
abs. 020.904 000.004 000.000 002.763 000.141 000.000 001.828
rel. 0,00542 0,00000 0,00000 0,00072 0,00004 0,00000 0,00047
token ty yt tz zt ät
abs. 006.229 000.881 000.052 000.004 000.000 000.000 000.000
rel. 0,00162 0,00023 0,00001 0,00000 0,00000 0,00000 0,00000
token öt üt ßt t t
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token uu uv vu uw wu ux xu
abs. 000.007 000.072 000.056 000.000 000.099 000.088 000.084
rel. 0,00000 0,00002 0,00001 0,00000 0,00003 0,00002 0,00002
token uy yu uz zu äu
abs. 000.393 000.013 000.176 000.010 000.000 000.000 000.000
rel. 0,00010 0,00000 0,00005 0,00000 0,00000 0,00000 0,00000
token öu üu ßu u u
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token vv vw wv vx xv vy yv
abs. 000.000 000.000 000.001 000.000 000.001 000.253 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00007 0,00000
token vz zv äv öv
abs. 000.000 000.007 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token üv ßv v v ww wx
abs. 000.000 000.000 000.000 000.000 000.000 000.008 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token xw wy yw wz zw äw
abs. 000.001 000.195 000.161 000.001 000.036 000.000 000.000
rel. 0,00000 0,00005 0,00004 0,00000 0,00001 0,00000 0,00000
token öw üw ßw w
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token w xx xy yx xz zx
abs. 000.000 000.001 000.023 000.002 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00001 0,00000 0,00000 0,00000 0,00000
token äx öx üx ßx
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token x x yy yz zy äy
abs. 000.000 000.000 000.000 000.011 000.159 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00004 0,00000 0,00000
token öy üy ßy y
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token y zz äz öz
abs. 000.000 000.274 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00007 0,00000 0,00000 0,00000 0,00000 0,00000
token üz ßz z z ää äö
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token öä äü üä äß ßä ä ä
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token öö öü üö öß ßö ö ö
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token üü üß ßü ü ü ßß ß
abs. 000.000 000.000 000.000 000.000 000.000 000.000 000.000
rel. 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000 0,00000
token ß
abs. 000.000 000.000
rel. 0,00000 0,00000

Ich hatte ja gesagt, dass das ganz schön viele sind. Die Betrachtung von Tri- und Nochmehr-Grammen erspare ich mir vorerst.

Häufigste kurze Schlüsselwörter #

Zusätzlich habe ich eine Liste von prägnanten Schlüsselwörtern erstellt. Dies setzt natürlich bereits Vorkenntnisse einer Sprache voraus, kann aber ebenfalls automatisiert werden (was ich irgendwann vielleicht auch mal machen werde).

Meine Liste für Deutsch/Englisch besteht aus folgenden Wörtern: ANALYSED_WORDS = “der die das the wer who wie how was what er he sie she es it wenn if dann then ein a ist is wo and und nach auf on ab from aus off mit with sein be his ich me mein my dein your”

Die Ergebnisse für diese Schlüsselwörter sehen wie folgt aus:

analyser KeywordFrequencyAnalyser
language deutsch
total 448823
token der die das the wer who wie
abs. 030.117 028.540 014.341 000.001 000.243 000.000 004.048
rel. 0,06710 0,06359 0,03195 0,00000 0,00054 0,00000 0,00902
token how was what er he sie she
abs. 000.000 003.269 000.000 007.639 000.000 009.892 000.000
rel. 0,00000 0,00728 0,00000 0,01702 0,00000 0,02204 0,00000
token es it wenn if dann then ein
abs. 008.758 000.000 002.787 000.000 000.951 000.000 006.463
rel. 0,01951 0,00000 0,00621 0,00000 0,00212 0,00000 0,01440
token a ist is wo and und nach
abs. 000.990 011.990 000.013 000.675 000.000 028.564 003.211
rel. 0,00221 0,02671 0,00003 0,00150 0,00000 0,06364 0,00715
token auf on ab from aus off mit
abs. 006.066 000.003 000.323 000.000 003.031 000.000 006.021
rel. 0,01352 0,00001 0,00072 0,00000 0,00675 0,00000 0,01342
token with sein be his ich me mein
abs. 000.000 004.055 000.002 000.000 008.004 000.004 000.525
rel. 0,00000 0,00903 0,00000 0,00000 0,01783 0,00001 0,00117
token my dein your
abs. 000.000 000.080 000.000
rel. 0,00000 0,00018 0,00000
analyser KeywordFrequencyAnalyser
language english
total 770195
token der die das the wer who wie
abs. 000.000 000.131 000.000 068.566 000.000 002.670 000.000
rel. 0,00000 0,00017 0,00000 0,08902 0,00000 0,00347 0,00000
token how was what er he sie she
abs. 001.288 015.397 003.129 000.109 015.475 000.000 006.224
rel. 0,00167 0,01999 0,00406 0,00014 0,02009 0,00000 0,00808
token es it wenn if dann then ein
abs. 000.001 014.913 000.000 003.485 000.000 002.602 000.000
rel. 0,00000 0,01936 0,00000 0,00452 0,00000 0,00338 0,00000
token a ist is wo and und nach
abs. 026.793 000.000 008.327 000.000 039.049 000.001 000.000
rel. 0,03479 0,00000 0,01081 0,00000 0,05070 0,00000 0,00000
token auf on ab from aus off mit
abs. 000.000 006.828 000.003 004.892 000.000 000.901 000.001
rel. 0,00000 0,00887 0,00000 0,00635 0,00000 0,00117 0,00000
token with sein be his ich me mein
abs. 009.293 000.000 007.063 012.168 000.000 004.061 000.002
rel. 0,01207 0,00000 0,00917 0,01580 0,00000 0,00527 0,00000
token my dein your
abs. 004.776 000.000 002.500
rel. 0,00620 0,00000 0,00325

Die Häufigkeiten sind relativ zur Summe aller aufgetauchten Schlüsselwörter bestimmt und nicht zur Summe aller verschiedener Wörter. Dies würde ja voraussetzen, dass man alle Wörter nachhält, was wieder recht Speicherintensiv wäre.

Analyse #

Nun wende ich die gewonnenen Daten auf neue Texte (hauptsächlich kürzere Nachrichtentexte aus dem Netz) an und bestimme den euklidschen Abstand zwischen den Statistiken des neuen Textes zu den der vorhandenen Sprachen. Man bedenke, dass eine kleinere Zahl einen kleineren “Abstand” zu dieser Sprache bedeutet und daher die Sprache identifiziert.

Deutscher Text “Die Mathe-Kompetenz steigt, Bericht: Neue PISA-Studie zeigt viel Stillstand - 60 Prozent der Schüler in Mathematik verbessert”

LetterFrequencyAnalyser deutsch 0.030792362448181926
LetterFrequencyAnalyser english 0.08809542306684467
BigrammFrequencyAnalyser deutsch 0.03541356776787419
BigrammFrequencyAnalyser english 0.09038405953807747
KeywordFrequencyAnalyser deutsch 0.07731872047723566
KeywordFrequencyAnalyser english 0.20037680477688585

Deutscher Text “FUSSBALL-LEGENDE Ferenc Puskás ist tot”

LetterFrequencyAnalyser deutsch 0.04840938315327702
LetterFrequencyAnalyser english 0.09643409539741049
BigrammFrequencyAnalyser deutsch 0.043410159788185125
BigrammFrequencyAnalyser english 0.08768861564376292
KeywordFrequencyAnalyser deutsch 0.08264984837990634
KeywordFrequencyAnalyser english 0.17524762979070838

Deutscher Text “ASYLPOLITIK - Innenminister einigen sich beim Bleiberecht”

LetterFrequencyAnalyser deutsch 0.028461735181487875
LetterFrequencyAnalyser english 0.10139339501365155
BigrammFrequencyAnalyser deutsch 0.035081022629477016
BigrammFrequencyAnalyser english 0.09442753487921235
KeywordFrequencyAnalyser deutsch 0.07388615347744187
KeywordFrequencyAnalyser english 0.18176011202277478

Englischer Text “Javadoc InetAddress”

LetterFrequencyAnalyser deutsch 0.09458231868141383
LetterFrequencyAnalyser english 0.061178755245269195
BigrammFrequencyAnalyser deutsch 0.09549646308136638
BigrammFrequencyAnalyser english 0.06517625457959006
KeywordFrequencyAnalyser deutsch 0.19150286462462796
KeywordFrequencyAnalyser english 0.07513373491102585

Englischer Text: “US Senate okays nuclear technology transfer to India”

LetterFrequencyAnalyser deutsch 0.09298511340726828
LetterFrequencyAnalyser english 0.038985710306149904
BigrammFrequencyAnalyser deutsch 0.09189667820735391
BigrammFrequencyAnalyser english 0.04695693869485645
KeywordFrequencyAnalyser deutsch 0.240164026452281
KeywordFrequencyAnalyser english 0.11098611557387729

Fazit #

Allein schon die Unigramm-Analyse liefert bei relativ kurzen Texten in “klarer” Sprache gute Ergebnisse. Zu testen ist, wie die Analyse auf “denglische” Texte und auf Fachtexte mit vielen englischen Vokabeln reagiert.

Selbst die Keywordanalyse bietet bereits gute Resultate und ist sehr Speicher und Performanz schonend. Dies liegt aber wohl auch daran, dass ich explizit Wörter ausgewählt habe, die kurz und in beiden Sprachen disjunkt vorkommen. Eine automatische Extraktion von solchen Schlüsselwörtern wäre wohl weit aus Speicher- und Performanzfressender, zumal jedes Wort, dass vorkommt, abgelegt werden müsste. Nach meiner Erfahrung in einem anderen Projekt von mir können das pro Sprache schon mal einige hunderttausend Wörter werden. Hier sollte sicherlich eine sinnvolle Beschränkung der Schlüsselwörter aushelfen, wie z. B. das ein Schlüsselwort maximal 5 Zeichen haben darf. Ich werde dem zu einem späteren Zeitpunkt nachgehen.

Als nächsten Schritt werde ich, wie in der Arbeit beschrieben, die durchschnittliche Wortlänge ermitteln. Und natürlich steht ein rieser Berg an Refactoring vor, damit die API etwas sauberer und flexibler wird.

So long…