Der Koran als Topic Map
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Blackjack,
das Schließen der Dateien werde ich nach Möglichkeit beherzigen und dein Beispiel habe ich erfolgreich getestet.
Das Stichwort "Histogramm" ist sicher für die Map sehr wichtig.
Untenstehend noch ein paar Zählungen, um mal zu zeigen, was
man alles so machen kann.
>>> sequenz = open("C:\Koran Umschrift.txt","r").read()
>>> len(sequenz)
745103 # Die Koran-Datei, inclusive Leerzeichen, hat eine Länge von 745,103 Zeichen
>>> text = sequenz.split()
>>> len(text)
78464 # Unterteilt man den Text an den Leerzeichen, dann erhält man 78,464 Wörter.
Nach anderen Berechnungen sind dies 78,679 Wörter: http://www.mghamdi.com/AD.pdf
>>> len(set(text))
17648 # Die mehrmals vorkommenden Wörter lassen sich auf 17,648 Token reduzieren
>>> 745103/78464
9
>>> 78464/17648
4 # Durchschnittlich besteht ein Wort aus 9 Zeichen + Leerzeichen und kommt 4 * vor.
Diese beiden Werte sind auf ganze Zahlen auf/abgerundet.
>>> Menge = set(text)
>>> print Menge, # Die (zufällig geordnete) Menge der Token beginnt dann so:
set(['wa-rasuul-un', 'xalq-u', 'sa&y-a-hu', 'tusiim-uuna', 'baddala', 'wa-ta(th)biit-an', '(sh)ajar-in', "wa-saa'at", 'wa-Hamalnaa-hum', 'wa-rasuul-u-hu',.......])
das Schließen der Dateien werde ich nach Möglichkeit beherzigen und dein Beispiel habe ich erfolgreich getestet.
Das Stichwort "Histogramm" ist sicher für die Map sehr wichtig.
Untenstehend noch ein paar Zählungen, um mal zu zeigen, was
man alles so machen kann.
>>> sequenz = open("C:\Koran Umschrift.txt","r").read()
>>> len(sequenz)
745103 # Die Koran-Datei, inclusive Leerzeichen, hat eine Länge von 745,103 Zeichen
>>> text = sequenz.split()
>>> len(text)
78464 # Unterteilt man den Text an den Leerzeichen, dann erhält man 78,464 Wörter.
Nach anderen Berechnungen sind dies 78,679 Wörter: http://www.mghamdi.com/AD.pdf
>>> len(set(text))
17648 # Die mehrmals vorkommenden Wörter lassen sich auf 17,648 Token reduzieren
>>> 745103/78464
9
>>> 78464/17648
4 # Durchschnittlich besteht ein Wort aus 9 Zeichen + Leerzeichen und kommt 4 * vor.
Diese beiden Werte sind auf ganze Zahlen auf/abgerundet.
>>> Menge = set(text)
>>> print Menge, # Die (zufällig geordnete) Menge der Token beginnt dann so:
set(['wa-rasuul-un', 'xalq-u', 'sa&y-a-hu', 'tusiim-uuna', 'baddala', 'wa-ta(th)biit-an', '(sh)ajar-in', "wa-saa'at", 'wa-Hamalnaa-hum', 'wa-rasuul-u-hu',.......])
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Durch "regular expressions" kann man vom konkreten Wort
abstrahieren und nach bestimmten Wortformen suchen.
Möchte man alle Worte der Form "fa'ala" finden, dann
ist dies eine Folge von Konsonanten, also nicht "^" a, i oder u
(andere kennt das Arabische nicht) und eben den Vokalen.
import re
from nltk_lite.utilities import re_show
text = open("C:\Koran Umschrift.txt","r").read()
re_show("[^aiu][a][^aiu][a][^aiu][a]",text)
suurat-u
l-{baqara}t-i
abstrahieren und nach bestimmten Wortformen suchen.
Möchte man alle Worte der Form "fa'ala" finden, dann
ist dies eine Folge von Konsonanten, also nicht "^" a, i oder u
(andere kennt das Arabische nicht) und eben den Vokalen.
import re
from nltk_lite.utilities import re_show
text = open("C:\Koran Umschrift.txt","r").read()
re_show("[^aiu][a][^aiu][a][^aiu][a]",text)
suurat-u
l-{baqara}t-i
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
Kai Borrmann hat geschrieben:Durch "regular expressions" kann man vom konkreten Wort
abstrahieren und nach bestimmten Wortformen suchen.
Bei Regular-Expressions ist es Sinnvoll, die Strings als Raw-Strings zu markieren, also ein ``r`` vor die Quotes zu setzen, damit man die Backslashes in den Regulären Ausdrücken vorkommen können, nicht mehrfach escapen muss.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Der automatisierten morphologischen Analyse des Korans gelingt es bisher,
ca. 70 % aller Worte eindeutig einzuordnen.
http://cs.haifa.ac.il/~shuly/publications/quran.pdf
>>> sequenz = open("C:\Koran mit Dubletten.txt","r").read()
>>> text = sequenz.split()
>>> len(text)
99004
>>> 99004-78464
20540
20,540 Fälle müßten also "von Hand" ausgewählt werden.
ca. 70 % aller Worte eindeutig einzuordnen.
http://cs.haifa.ac.il/~shuly/publications/quran.pdf
>>> sequenz = open("C:\Koran mit Dubletten.txt","r").read()
>>> text = sequenz.split()
>>> len(text)
99004
>>> 99004-78464
20540
20,540 Fälle müßten also "von Hand" ausgewählt werden.
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Die oben dargestellte Möglichkeit, Wörter abzuzählen, läßt sich durch die Bedingung if len(word) auf bestimmte Wortlängen einschränken.
for word, count in sorted(histogram.iteritems()):
if len(word) == 3:
print count, word,
print
Es folgt die Auflistung aller Wörter, die drei Zeichen lang sind:
153 &an 110 'am 519 'an 264 'aw 1 'ii 1 'il 344 'in 2 'ti 113 bal 2 bni 6 d&u 1184 fii 2 haa 4 hab 66 hal 180 hum 12 kam 4 kay 8 kun 813 laa 163 lam 59 lan 77 law 1011 maa 368 man 1672 min 120 qad 263 qul 1 qum 1 quu 1 sal 1 tlu 349 yaa 1 zid
Oder wir wollen wissen, wie oft Moses genannt wird:
if word.endswith("usaa"):
1 bi-muusaa 1 li-muusaa 129 muusaa 5 wa-muusaa
Oder Muhammad:
if word.startswith("muHammad"):
2 muHammad-in 3 muHammad-un
for word, count in sorted(histogram.iteritems()):
if len(word) == 3:
print count, word,
Es folgt die Auflistung aller Wörter, die drei Zeichen lang sind:
153 &an 110 'am 519 'an 264 'aw 1 'ii 1 'il 344 'in 2 'ti 113 bal 2 bni 6 d&u 1184 fii 2 haa 4 hab 66 hal 180 hum 12 kam 4 kay 8 kun 813 laa 163 lam 59 lan 77 law 1011 maa 368 man 1672 min 120 qad 263 qul 1 qum 1 quu 1 sal 1 tlu 349 yaa 1 zid
Oder wir wollen wissen, wie oft Moses genannt wird:
if word.endswith("usaa"):
1 bi-muusaa 1 li-muusaa 129 muusaa 5 wa-muusaa
Oder Muhammad:
if word.startswith("muHammad"):
2 muHammad-in 3 muHammad-un
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Nach einigen Umwegen der Bearbeitung folgt hier die geordnete Menge ("sorted set") der in der Ausgangsdatei "qurout.txt" als Eigennamen "ProperName" gekennzeichneten Wörter.
Es ist zu beachten, daß diese Liste einige Fehler enthält: Der Brokat, "istabraq", etwa kann im Koran kein Eigenname sein.
['&aad', '&adn', '&arafaat', '&arim', '&iisaa', '&imraan', '&uzayr', '&uzzaa', "'aHmad", "'aadam", "'aan", "'aazar", "'ayy", "'ayy-i", "'ayyat", "'ayyuub", "'ibliis", "'ibraahiim", "'idriis", "'ilyaas", "'injiil", "'injiil", "'iram", "'isHaaq", "'ismaa&iil", "'israa'iil", "'istabraq", "'uff", '(sh)u&ayb', '(th)amuud', 'Hunayn', 'Safaa', 'Taaguut', 'Taaluut', 'baabil', 'badr', 'bakkat', 'daawuud', 'fir&awn', 'firdaws', 'haamaan', 'haaruun', 'haaruut', 'huud', 'jaaluut', 'jahannam', 'jibriil', 'juudiyy', "l-'aykat",, 'l-laat', 'l-yasa&', 'laZaa', 'llaah', 'luqmaan', 'luuT', "ma'juuj", 'maaruut', 'madyan', 'makkat', 'manaat', 'marwat', 'maryam', 'miSr', 'miikaal', 'muHammad', 'muusaa', 'nuuH', 'qaaruun', 'quray(sh)', 'ramaDan', 'ruum', "saba'", 'saqar', "saynaa'", 'siiniin', 'sulaymaan', 'tawraat', 'tubba&', 'ya&quub', 'ya&uuq', "ya'juuj", 'ya(th)rib', 'yaHyaa', 'yaasiin', 'yaguu(th)', 'yuunus', 'yuusuf', 'zakariyyaa', 'zayd']
Es ist zu beachten, daß diese Liste einige Fehler enthält: Der Brokat, "istabraq", etwa kann im Koran kein Eigenname sein.
['&aad', '&adn', '&arafaat', '&arim', '&iisaa', '&imraan', '&uzayr', '&uzzaa', "'aHmad", "'aadam", "'aan", "'aazar", "'ayy", "'ayy-i", "'ayyat", "'ayyuub", "'ibliis", "'ibraahiim", "'idriis", "'ilyaas", "'injiil", "'injiil", "'iram", "'isHaaq", "'ismaa&iil", "'israa'iil", "'istabraq", "'uff", '(sh)u&ayb', '(th)amuud', 'Hunayn', 'Safaa', 'Taaguut', 'Taaluut', 'baabil', 'badr', 'bakkat', 'daawuud', 'fir&awn', 'firdaws', 'haamaan', 'haaruun', 'haaruut', 'huud', 'jaaluut', 'jahannam', 'jibriil', 'juudiyy', "l-'aykat",, 'l-laat', 'l-yasa&', 'laZaa', 'llaah', 'luqmaan', 'luuT', "ma'juuj", 'maaruut', 'madyan', 'makkat', 'manaat', 'marwat', 'maryam', 'miSr', 'miikaal', 'muHammad', 'muusaa', 'nuuH', 'qaaruun', 'quray(sh)', 'ramaDan', 'ruum', "saba'", 'saqar', "saynaa'", 'siiniin', 'sulaymaan', 'tawraat', 'tubba&', 'ya&quub', 'ya&uuq', "ya'juuj", 'ya(th)rib', 'yaHyaa', 'yaasiin', 'yaguu(th)', 'yuunus', 'yuusuf', 'zakariyyaa', 'zayd']
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Ein Beispiel für die Darstellung des Partikels "kallaa" durch eine KWIC "Key Word in Context" Analyse.
text = open("C:\Koran Umschrift.txt","r").read().split()
kwicdict = {}
ngrams = [text[i:i+6] for i in range(len(text)-5)]
for n in ngrams:
if n[2] not in kwicdict:
kwicdict[n[2]] = [n]
else:
kwicdict[n[2]].append(n)
for n in kwicdict['kallaa']:
outstring = ' '.join(n[:2]).rjust(20)
outstring += str(n[2]).center(len(n[2])+6)
outstring += ' '.join(n[3:])
print outstring
text = open("C:\Koran Umschrift.txt","r").read().split()
kwicdict = {}
ngrams = [text[i:i+6] for i in range(len(text)-5)]
for n in ngrams:
if n[2] not in kwicdict:
kwicdict[n[2]] = [n]
else:
kwicdict[n[2]].append(n)
for n in kwicdict['kallaa']:
outstring = ' '.join(n[:2]).rjust(20)
outstring += str(n[2]).center(len(n[2])+6)
outstring += ' '.join(n[3:])
print outstring
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Python-Code bitte , dann wird er lesbarer. 
Code: Alles auswählen
in Tags setzen

- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Mal ein Beispiel für eine KWIC-Analyse:
Der Kontext der ersten fünf Surennamen
&alay-him wa-laa l-Daall-iina suurat-u l-baqarat-i
&alaa l-qawm-i l-kaafir-iina suurat-u 'aal-i
llaah-a la&alla-kum tufliH-uuna suurat-u l-nisaa'-i
bi-kull-i (sh)ay'-in &aliim-un suurat-u l-maa'idat-i
kull-i (sh)ay'-in qadiir-un suurat-u l-'an&aam-i
wa-'inna-hu la-gafuur-un raHiim-un suurat-u l-'a&raaf-i
wa-yusabbiH-uuna-hu wa-la-hu yasjud-uuna suurat-u l-'anfaal-i
Der Kontext der ersten fünf Surennamen
&alay-him wa-laa l-Daall-iina suurat-u l-baqarat-i
&alaa l-qawm-i l-kaafir-iina suurat-u 'aal-i
llaah-a la&alla-kum tufliH-uuna suurat-u l-nisaa'-i
bi-kull-i (sh)ay'-in &aliim-un suurat-u l-maa'idat-i
kull-i (sh)ay'-in qadiir-un suurat-u l-'an&aam-i
wa-'inna-hu la-gafuur-un raHiim-un suurat-u l-'a&raaf-i
wa-yusabbiH-uuna-hu wa-la-hu yasjud-uuna suurat-u l-'anfaal-i
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
Nur mal der Interesse halber: Der selbe Kai Borrmann dieses FAZ Artikels?
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
EyDu hat geschrieben:Nur mal der Interesse halber: Der selbe Kai Borrmann dieses FAZ Artikels?
Ja, dieser Artikel der TAZ (nicht FAZ) erwähnt auch mich. Es ging seinerzeit aber nicht um Python.

Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Mit dem folgenden Beispiel kann man eine Grafik erzeugen,
die erkennbar macht, daß die Suren des Koran nicht, wie oft
zu lesen, nach absteigender Länge sortiert sind.
Dies stimmt generell, aber nicht durchweg; manchmal folgen
längere auf kürzere.
[code=]
from Tkinter import *
root = Tk()
sequenz = open("C:\Koran Umschrift.txt","r").read()
text = sequenz.split()
text
words = ["suurat-u"]
from Tkinter import Canvas
w = Canvas(width=800,height=100*len(words))
text = list(text)
scale = float(800)/len(text)
position = 0
for word in text:
for i in range(len(words)):
x = position * scale
if word == words[i]:
y = i * 100
w.create_line(x,y,x, y+100-1)
position += 1
w.pack()
mainloop()[/code]
die erkennbar macht, daß die Suren des Koran nicht, wie oft
zu lesen, nach absteigender Länge sortiert sind.
Dies stimmt generell, aber nicht durchweg; manchmal folgen
längere auf kürzere.
[code=]
from Tkinter import *
root = Tk()
sequenz = open("C:\Koran Umschrift.txt","r").read()
text = sequenz.split()
text
words = ["suurat-u"]
from Tkinter import Canvas
w = Canvas(width=800,height=100*len(words))
text = list(text)
scale = float(800)/len(text)
position = 0
for word in text:
for i in range(len(words)):
x = position * scale
if word == words[i]:
y = i * 100
w.create_line(x,y,x, y+100-1)
position += 1
w.pack()
mainloop()[/code]
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Hier ist ein erster Versuch der Visualisierung zu finden:
http://user.baden-online.de/~pjanssen/t ... index.html
http://user.baden-online.de/~pjanssen/t ... index.html
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
- Kai Borrmann
- User
- Beiträge: 29
- Registriert: Sonntag 7. Januar 2007, 09:11
- Wohnort: Berlin
Über den ISO-Standard zur Topic Map haben wir uns noch keine verschärften Gedanken gemacht.
"Topic map" ist zunächst mal ein Bezugsrahmen, über den auf dem folgenden, für dieses Projekt gegründeten, Blog auch diskutiert werden kann:
http://www.raunaq.info-a.googlepages.com/
Über Besucher freuen wir uns!
"Topic map" ist zunächst mal ein Bezugsrahmen, über den auf dem folgenden, für dieses Projekt gegründeten, Blog auch diskutiert werden kann:
http://www.raunaq.info-a.googlepages.com/
Über Besucher freuen wir uns!
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Sperlingsgasse 1
10178 Berlin
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder