summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--silpa/modules/ngram/ml.txt1
-rw-r--r--silpa/modules/ngram/ngram_ml.txt238
-rw-r--r--silpa/modules/ngram/sample_ngram.py55
-rw-r--r--silpa/modules/ngram/visualizer.py49
4 files changed, 331 insertions, 12 deletions
diff --git a/silpa/modules/ngram/ml.txt b/silpa/modules/ngram/ml.txt
new file mode 100644
index 0000000..4c48980
--- /dev/null
+++ b/silpa/modules/ngram/ml.txt
@@ -0,0 +1 @@
+കടലില്‍ ജീവിക്കുന്ന ഒരു സസ്തനിയാണ് നീലത്തിമിംഗലം. ബലീന്‍ തിമിംഗലങ്ങളുടെ ഒരു ഉപജാതിയാണിവ. ലോകത്ത് ഇന്നുവരെയുള്ളതില്‍ ഏറ്റവും വലിയ ജീവിയായി കണക്കാക്കപ്പെടുന്ന നീലത്തിമിംഗലങ്ങള്‍ക്ക് 33 മീ. നീളവും 181 മെട്രിക് ടണിലധികം ഭാരവും ഉണ്ടാകാം. നീണ്ട ശരീരപ്രകൃതിയുള്ള നീലത്തിമിംഗലങ്ങളുടെ ശരീരം നീലകലര്‍ന്ന ചാരനിറത്തോടെയാണുണ്ടാവുക, ശരീരത്തിനടിഭാഗത്തേക്ക് നിറം കുറവായിരിക്കും. നീലത്തിമിംഗലങ്ങള്‍ക്ക് കുറഞ്ഞത് മൂന്നുപജാതികളെങ്കിലും ഉണ്ടെന്നു കരുതുന്നു.
diff --git a/silpa/modules/ngram/ngram_ml.txt b/silpa/modules/ngram/ngram_ml.txt
new file mode 100644
index 0000000..a4db8f1
--- /dev/null
+++ b/silpa/modules/ngram/ngram_ml.txt
@@ -0,0 +1,238 @@
+(dp0
+V\u0d35\u0d32\u0d3f\u0d2f
+p1
+V\u0d1c\u0d40\u0d35\u0d3f\u0d2f\u0d3e\u0d2f\u0d3f -> \u0d1c\u0d40\u0d35\u0d3f\u0d2f\u0d3e\u0d2f\u0d3f
+p2
+sV\u0d2e\u0d31\u0d4d\u0d31\u0d4d
+p3
+V\u0d2c\u0d32\u0d40\u0d28\u0d4d\u200d -> \u0d2c\u0d32\u0d40\u0d28\u0d4d\u200d -> \u0d2c\u0d32\u0d40\u0d28\u0d4d\u200d
+p4
+sV\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d4d
+p5
+V33 -> \u0d15\u0d41\u0d31\u0d1e\u0d4d\u0d1e\u0d24\u0d4d -> 33 -> \u0d15\u0d41\u0d31\u0d1e\u0d4d\u0d1e\u0d24\u0d4d
+p6
+sV\u0d1c\u0d40\u0d35\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28
+p7
+V\u0d12\u0d30\u0d41 -> \u0d12\u0d30\u0d41
+p8
+sV\u0d06\u0d23\u0d41
+p9
+V\u0d2d\u0d15\u0d4d\u0d37\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d4d -> \u0d2d\u0d15\u0d4d\u0d37\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d4d -> \u0d2d\u0d15\u0d4d\u0d37\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d4d
+p10
+sV\u0d05\u0d31\u0d4d\u0d31\u0d4d\u0d32\u0d3e\u0d28\u0d4d\u0d31\u0d3f\u0d15\u0d4d
+p11
+V\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d41\u0d02 -> \u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d41\u0d02 -> \u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d41\u0d02
+p12
+sV\u0d28\u0d40\u0d32\u0d15\u0d32\u0d30\u0d4d\u200d\u0d28\u0d4d\u0d28
+p13
+V\u0d1a\u0d3e\u0d30\u0d28\u0d3f\u0d31\u0d24\u0d4d\u0d24\u0d4b\u0d1f\u0d46\u0d2f\u0d3e\u0d23\u0d41\u0d23\u0d4d\u0d1f\u0d3e\u0d35\u0d41\u0d15 -> \u0d1a\u0d3e\u0d30\u0d28\u0d3f\u0d31\u0d24\u0d4d\u0d24\u0d4b\u0d1f\u0d46\u0d2f\u0d3e\u0d23\u0d41\u0d23\u0d4d\u0d1f\u0d3e\u0d35\u0d41\u0d15
+p14
+sV\u0d36\u0d30\u0d40\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d28\u0d1f\u0d3f\u0d2d\u0d3e\u0d17\u0d24\u0d4d\u0d24\u0d47\u0d15\u0d4d\u0d15\u0d4d
+p15
+V\u0d28\u0d3f\u0d31\u0d02 -> \u0d28\u0d3f\u0d31\u0d02
+p16
+sV\u0d28\u0d40\u0d23\u0d4d\u0d1f
+p17
+V\u0d36\u0d30\u0d40\u0d30\u0d2a\u0d4d\u0d30\u0d15\u0d43\u0d24\u0d3f\u0d2f\u0d41\u0d33\u0d4d\u0d33 -> \u0d36\u0d30\u0d40\u0d30\u0d2a\u0d4d\u0d30\u0d15\u0d43\u0d24\u0d3f\u0d2f\u0d41\u0d33\u0d4d\u0d33
+p18
+sV\u0d2e\u0d42\u0d28\u0d4d\u0d28\u0d41\u0d2a\u0d1c\u0d3e\u0d24\u0d3f\u0d15\u0d33\u0d46\u0d19\u0d4d\u0d15\u0d3f\u0d32\u0d41\u0d02
+p19
+V\u0d09\u0d23\u0d4d\u0d1f\u0d46\u0d28\u0d4d\u0d28\u0d41 -> \u0d09\u0d23\u0d4d\u0d1f\u0d46\u0d28\u0d4d\u0d28\u0d41
+p20
+sV\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d41\u0d02
+p21
+V\u0d35\u0d1f\u0d15\u0d4d\u0d15\u0d28\u0d4d\u200d -> \u0d35\u0d1f\u0d15\u0d4d\u0d15\u0d28\u0d4d\u200d -> \u0d35\u0d1f\u0d15\u0d4d\u0d15\u0d28\u0d4d\u200d
+p22
+sV\u0d28\u0d40\u0d30\u0d3e\u0d33\u0d3f\u0d15\u0d33\u0d47\u0d2f\u0d41\u0d02
+p23
+V\u0d05\u0d15\u0d24\u0d4d\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d3e\u0d31\u0d41\u0d23\u0d4d\u0d1f\u0d4d -> \u0d05\u0d15\u0d24\u0d4d\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d3e\u0d31\u0d41\u0d23\u0d4d\u0d1f\u0d4d -> \u0d05\u0d15\u0d24\u0d4d\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d3e\u0d31\u0d41\u0d23\u0d4d\u0d1f\u0d4d
+p24
+sV\u0d1a\u0d46\u0d31\u0d3f\u0d2f
+p25
+V\u0d28\u0d40\u0d30\u0d3e\u0d33\u0d3f\u0d15\u0d33\u0d47\u0d2f\u0d41\u0d02 -> \u0d28\u0d40\u0d30\u0d3e\u0d33\u0d3f\u0d15\u0d33\u0d47\u0d2f\u0d41\u0d02 -> \u0d28\u0d40\u0d30\u0d3e\u0d33\u0d3f\u0d15\u0d33\u0d47\u0d2f\u0d41\u0d02
+p26
+sV\u0d15\u0d1f\u0d32\u0d3f\u0d32\u0d4d\u200d
+p27
+V\u0d1c\u0d40\u0d35\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28 -> \u0d1c\u0d40\u0d35\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28
+p28
+sV\u0d1c\u0d40\u0d35\u0d3f\u0d2f\u0d3e\u0d2f\u0d3f
+p29
+V\u0d15\u0d23\u0d15\u0d4d\u0d15\u0d3e\u0d15\u0d4d\u0d15\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28 -> \u0d15\u0d23\u0d15\u0d4d\u0d15\u0d3e\u0d15\u0d4d\u0d15\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28
+p30
+sV\u0d15\u0d3e\u0d23\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28
+p31
+V\u0d15\u0d41\u0d33\u0d4d\u0d33\u0d28\u0d4d\u200d -> \u0d15\u0d41\u0d33\u0d4d\u0d33\u0d28\u0d4d\u200d -> \u0d15\u0d41\u0d33\u0d4d\u0d33\u0d28\u0d4d\u200d
+p32
+sV\u0d15\u0d3e\u0d23\u0d41\u0d28\u0d4d\u0d28
+p33
+V\u0d2c\u0d3f -> \u0d2c\u0d3f -> \u0d2c\u0d3f -> \u0d2c\u0d3f -> \u0d2c\u0d3f -> \u0d2c\u0d3f
+p34
+sV\u0d15\u0d23\u0d15\u0d4d\u0d15\u0d3e\u0d15\u0d4d\u0d15\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28
+p35
+V\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d4d -> \u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d4d
+p36
+sV\u0d15\u0d41\u0d31\u0d1e\u0d4d\u0d1e\u0d24\u0d4d
+p37
+V\u0d2e\u0d42\u0d28\u0d4d\u0d28\u0d41\u0d2a\u0d1c\u0d3e\u0d24\u0d3f\u0d15\u0d33\u0d46\u0d19\u0d4d\u0d15\u0d3f\u0d32\u0d41\u0d02 -> \u0d2e\u0d42\u0d28\u0d4d\u0d28\u0d41\u0d2a\u0d1c\u0d3e\u0d24\u0d3f\u0d15\u0d33\u0d46\u0d19\u0d4d\u0d15\u0d3f\u0d32\u0d41\u0d02
+p38
+sV\u0d15\u0d41\u0d33\u0d4d\u0d33\u0d28\u0d4d\u200d
+p39
+V\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d02 -> \u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d02 -> \u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d02
+p40
+sV181
+p41
+V\u0d2e\u0d46\u0d1f\u0d4d\u0d30\u0d3f\u0d15\u0d4d -> \u0d2e\u0d46\u0d1f\u0d4d\u0d30\u0d3f\u0d15\u0d4d
+p42
+sV\u0d0f\u0d31\u0d4d\u0d31\u0d35\u0d41\u0d02
+p43
+V\u0d35\u0d32\u0d3f\u0d2f -> \u0d35\u0d32\u0d3f\u0d2f
+p44
+sV\u0d36\u0d30\u0d40\u0d30\u0d2a\u0d4d\u0d30\u0d15\u0d43\u0d24\u0d3f\u0d2f\u0d41\u0d33\u0d4d\u0d33
+p45
+V\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 -> \u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46
+p46
+sV\u0d15\u0d23\u0d4d\u0d1f\u0d41
+p47
+V\u0d35\u0d30\u0d41\u0d28\u0d4d\u0d28 -> \u0d35\u0d30\u0d41\u0d28\u0d4d\u0d28 -> \u0d35\u0d30\u0d41\u0d28\u0d4d\u0d28
+p48
+sV\u0d26\u0d15\u0d4d\u0d37\u0d3f\u0d23
+p49
+V\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d -> \u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d -> \u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d
+p50
+sV\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d
+p51
+V\u0d15\u0d3e\u0d23\u0d41\u0d28\u0d4d\u0d28 -> \u0d15\u0d3e\u0d23\u0d41\u0d28\u0d4d\u0d28 -> \u0d15\u0d3e\u0d23\u0d41\u0d28\u0d4d\u0d28
+p52
+sV\u0d38\u0d38\u0d4d\u0d24\u0d28\u0d3f\u0d2f\u0d3e\u0d23\u0d4d
+p53
+V\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d02 -> \u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d02
+p54
+sV\u0d07\u0d28\u0d4d\u0d28\u0d41\u0d35\u0d30\u0d46\u0d2f\u0d41\u0d33\u0d4d\u0d33\u0d24\u0d3f\u0d32\u0d4d\u200d
+p55
+V\u0d0f\u0d31\u0d4d\u0d31\u0d35\u0d41\u0d02 -> \u0d0f\u0d31\u0d4d\u0d31\u0d35\u0d41\u0d02
+p56
+sV\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46
+p57
+V\u0d36\u0d30\u0d40\u0d30\u0d02 -> \u0d36\u0d30\u0d40\u0d30\u0d02
+p58
+sV\u0d2d\u0d3e\u0d30\u0d35\u0d41\u0d02
+p59
+V\u0d09\u0d23\u0d4d\u0d1f\u0d3e\u0d15\u0d3e\u0d02 -> \u0d09\u0d23\u0d4d\u0d1f\u0d3e\u0d15\u0d3e\u0d02
+p60
+sV\u0d2a\u0d4b\u0d32\u0d46
+p61
+V\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d02 -> \u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d02 -> \u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d02
+p62
+sV\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46
+p63
+V\u0d12\u0d30\u0d41 -> \u0d12\u0d30\u0d41
+p64
+sV\u0d2e\u0d46\u0d1f\u0d4d\u0d30\u0d3f\u0d15\u0d4d
+p65
+V\u0d1f\u0d23\u0d3f\u0d32\u0d27\u0d3f\u0d15\u0d02 -> \u0d1f\u0d23\u0d3f\u0d32\u0d27\u0d3f\u0d15\u0d02
+p66
+sV\u0d1a\u0d46\u0d31\u0d41\u0d2e\u0d24\u0d4d\u0d38\u0d4d\u0d2f\u0d19\u0d4d\u0d19\u0d33\u0d47\u0d2f\u0d41\u0d02
+p67
+V\u0d1a\u0d46\u0d31\u0d3f\u0d2f -> \u0d1a\u0d46\u0d31\u0d3f\u0d2f -> \u0d1a\u0d46\u0d31\u0d3f\u0d2f
+p68
+sV\u0d1c\u0d40\u0d35\u0d3f\u0d15\u0d33\u0d46
+p69
+V\u0d06\u0d23\u0d41 -> \u0d06\u0d23\u0d41 -> \u0d06\u0d23\u0d41
+p70
+sV\u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d
+p71
+V\u0d15\u0d3e\u0d23\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28 -> \u0d15\u0d23\u0d4d\u0d1f\u0d41 -> \u0d15\u0d3e\u0d23\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28 -> \u0d15\u0d23\u0d4d\u0d1f\u0d41 -> \u0d15\u0d3e\u0d23\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28 -> \u0d15\u0d23\u0d4d\u0d1f\u0d41
+p72
+sV\u0d35\u0d1f\u0d15\u0d4d\u0d15\u0d28\u0d4d\u200d
+p73
+V\u0d05\u0d31\u0d4d\u0d31\u0d4d\u0d32\u0d3e\u0d28\u0d4d\u0d31\u0d3f\u0d15\u0d4d -> \u0d2a\u0d38\u0d2b\u0d3f\u0d15\u0d4d -> \u0d05\u0d31\u0d4d\u0d31\u0d4d\u0d32\u0d3e\u0d28\u0d4d\u0d31\u0d3f\u0d15\u0d4d -> \u0d2a\u0d38\u0d2b\u0d3f\u0d15\u0d4d -> \u0d05\u0d31\u0d4d\u0d31\u0d4d\u0d32\u0d3e\u0d28\u0d4d\u0d31\u0d3f\u0d15\u0d4d -> \u0d2a\u0d38\u0d2b\u0d3f\u0d15\u0d4d
+p74
+sV\u0d12\u0d30\u0d41
+p75
+V\u0d38\u0d38\u0d4d\u0d24\u0d28\u0d3f\u0d2f\u0d3e\u0d23\u0d4d -> \u0d09\u0d2a\u0d1c\u0d3e\u0d24\u0d3f\u0d2f\u0d3e\u0d23\u0d3f\u0d35 -> \u0d38\u0d38\u0d4d\u0d24\u0d28\u0d3f\u0d2f\u0d3e\u0d23\u0d4d -> \u0d09\u0d2a\u0d1c\u0d3e\u0d24\u0d3f\u0d2f\u0d3e\u0d23\u0d3f\u0d35
+p76
+sV\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d02
+p77
+V\u0d0e\u0d28\u0d4d\u0d28\u0d3f\u0d35\u0d2f\u0d3e\u0d23\u0d35 -> \u0d0e\u0d28\u0d4d\u0d28\u0d3f\u0d35\u0d2f\u0d3e\u0d23\u0d35 -> \u0d0e\u0d28\u0d4d\u0d28\u0d3f\u0d35\u0d2f\u0d3e\u0d23\u0d35
+p78
+sV\u0d28\u0d40\u0d32\u0d24\u0d4d\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d02
+p79
+V\u0d15\u0d4a\u0d1e\u0d4d\u0d1a\u0d41\u0d2a\u0d4b\u0d32\u0d41\u0d33\u0d4d\u0d33 -> \u0d15\u0d4a\u0d1e\u0d4d\u0d1a\u0d41\u0d2a\u0d4b\u0d32\u0d41\u0d33\u0d4d\u0d33 -> \u0d15\u0d4a\u0d1e\u0d4d\u0d1a\u0d41\u0d2a\u0d4b\u0d32\u0d41\u0d33\u0d4d\u0d33
+p80
+sV\u0d09\u0d23\u0d4d\u0d1f\u0d46\u0d28\u0d4d\u0d28\u0d41
+p81
+V\u0d15\u0d30\u0d41\u0d24\u0d41\u0d28\u0d4d\u0d28\u0d41 -> \u0d15\u0d30\u0d41\u0d24\u0d41\u0d28\u0d4d\u0d28\u0d41
+p82
+sV\u0d07\u0d28\u0d4d\u0d24\u0d4d\u0d2f\u0d28\u0d4d\u200d
+p83
+V\u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d -> \u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d -> \u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d -> \u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d -> \u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d -> \u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d4d\u200d
+p84
+sV\u0d2e\u0d38\u0d4d\u0d15\u0d41\u0d32\u0d38\u0d4d
+p85
+V(B -> (B -> (B
+p86
+sV\u0d1f\u0d23\u0d3f\u0d32\u0d27\u0d3f\u0d15\u0d02
+p87
+V\u0d2d\u0d3e\u0d30\u0d35\u0d41\u0d02 -> \u0d2d\u0d3e\u0d30\u0d35\u0d41\u0d02
+p88
+sV\u0d32\u0d4b\u0d15\u0d24\u0d4d\u0d24\u0d4d
+p89
+V\u0d07\u0d28\u0d4d\u0d28\u0d41\u0d35\u0d30\u0d46\u0d2f\u0d41\u0d33\u0d4d\u0d33\u0d24\u0d3f\u0d32\u0d4d\u200d -> \u0d07\u0d28\u0d4d\u0d28\u0d41\u0d35\u0d30\u0d46\u0d2f\u0d41\u0d33\u0d4d\u0d33\u0d24\u0d3f\u0d32\u0d4d\u200d
+p90
+sV\u0d07\u0d28\u0d4d\u200d\u0d21\u0d3f\u0d15
+p91
+V\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 -> \u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 -> \u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41
+p92
+sV33
+p93
+V\u0d2e\u0d40 -> \u0d2e\u0d40
+p94
+sV\u0d28\u0d3f\u0d31\u0d02
+p95
+V\u0d15\u0d41\u0d31\u0d35\u0d3e\u0d2f\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d02 -> \u0d15\u0d41\u0d31\u0d35\u0d3e\u0d2f\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d02
+p96
+sV\u0d2a\u0d41\u0d31\u0d02\u0d24\u0d4b\u0d1f\u0d41\u0d33\u0d4d\u0d33
+p97
+V\u0d1a\u0d46\u0d31\u0d41 -> \u0d1a\u0d46\u0d31\u0d41 -> \u0d1a\u0d46\u0d31\u0d41
+p98
+sV\u0d2a\u0d38\u0d2b\u0d3f\u0d15\u0d4d
+p99
+V\u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d41\u0d02 -> \u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d41\u0d02 -> \u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d41\u0d02
+p100
+sV\u0d36\u0d30\u0d40\u0d30\u0d02
+p101
+V\u0d28\u0d40\u0d32\u0d15\u0d32\u0d30\u0d4d\u200d\u0d28\u0d4d\u0d28 -> \u0d28\u0d40\u0d32\u0d15\u0d32\u0d30\u0d4d\u200d\u0d28\u0d4d\u0d28
+p102
+sV\u0d2e\u0d39\u0d3e\u0d38\u0d2e\u0d41\u0d26\u0d4d\u0d30\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d41\u0d02
+p103
+V\u0d15\u0d3e\u0d23\u0d41\u0d28\u0d4d\u0d28 -> \u0d15\u0d3e\u0d23\u0d41\u0d28\u0d4d\u0d28 -> \u0d15\u0d3e\u0d23\u0d41\u0d28\u0d4d\u0d28
+p104
+sV\u0d15\u0d4a\u0d1e\u0d4d\u0d1a\u0d41\u0d2a\u0d4b\u0d32\u0d41\u0d33\u0d4d\u0d33
+p105
+V\u0d2a\u0d41\u0d31\u0d02\u0d24\u0d4b\u0d1f\u0d41\u0d33\u0d4d\u0d33 -> \u0d2a\u0d41\u0d31\u0d02\u0d24\u0d4b\u0d1f\u0d41\u0d33\u0d4d\u0d33 -> \u0d2a\u0d41\u0d31\u0d02\u0d24\u0d4b\u0d1f\u0d41\u0d33\u0d4d\u0d33
+p106
+sV\u0d2c\u0d32\u0d40\u0d28\u0d4d\u200d
+p107
+V\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 -> \u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d46 -> \u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d46 -> \u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d46 -> \u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46
+p108
+sV\u0d24\u0d3f\u0d2e\u0d3f\u0d02\u0d17\u0d32\u0d19\u0d4d\u0d19\u0d33\u0d46
+p109
+V\u0d2a\u0d4b\u0d32\u0d46 -> \u0d2a\u0d4b\u0d32\u0d46 -> \u0d2a\u0d4b\u0d32\u0d46
+p110
+sV\u0d28\u0d40\u0d33\u0d35\u0d41\u0d02
+p111
+V181 -> 181
+p112
+sV\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41
+p113
+V\u0d09\u0d2a\u0d1c\u0d3e\u0d24\u0d3f\u0d2f\u0d3e\u0d35\u0d3e\u0d28\u0d3f\u0d1f\u0d2f\u0d41\u0d23\u0d4d\u0d1f\u0d4d -> \u0d09\u0d2a\u0d1c\u0d3e\u0d24\u0d3f\u0d2f\u0d3e\u0d35\u0d3e\u0d28\u0d3f\u0d1f\u0d2f\u0d41\u0d23\u0d4d\u0d1f\u0d4d -> \u0d09\u0d2a\u0d1c\u0d3e\u0d24\u0d3f\u0d2f\u0d3e\u0d35\u0d3e\u0d28\u0d3f\u0d1f\u0d2f\u0d41\u0d23\u0d4d\u0d1f\u0d4d
+p114
+sV\u0d1a\u0d46\u0d31\u0d41
+p115
+V\u0d1c\u0d40\u0d35\u0d3f\u0d15\u0d33\u0d46 -> \u0d1c\u0d40\u0d35\u0d3f\u0d15\u0d33\u0d46 -> \u0d1c\u0d40\u0d35\u0d3f\u0d15\u0d33\u0d46
+p116
+sV\u0d35\u0d30\u0d41\u0d28\u0d4d\u0d28
+p117
+V\u0d2c\u0d3f -> \u0d2c\u0d3f -> \u0d2c\u0d3f
+p118
+s. \ No newline at end of file
diff --git a/silpa/modules/ngram/sample_ngram.py b/silpa/modules/ngram/sample_ngram.py
new file mode 100644
index 0000000..d373aa8
--- /dev/null
+++ b/silpa/modules/ngram/sample_ngram.py
@@ -0,0 +1,55 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+# Ngram
+# Copyright 2009 Jinesh K J <jinesh.k@gmail.com>
+# Copyright 2009 Swathantra Malayalam Computing <smc-discuss@googlegroups.com>
+# http://www.smc.org.in
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# If you find any bugs or have any suggestions email: jinesh.k@gmail.com or smc-discuss@googlegroups.com
+# URL: http://www.smc.org.in
+import pydot
+import codecs
+import pickle
+import sys
+from visualizer import NGramVisualizer
+
+def printGraph(corpus,start_word):
+ ngv=NGramVisualizer ()
+ graph_dict=pickle.load(open(corpus))
+ graph=pydot.Dot()
+ uni_start_word = start_word.decode("utf-8")
+# print start_word
+# print uni_start_word
+ graph=ngv.generate_graph(graph_dict, graph,uni_start_word)
+ print graph.to_string().encode("utf-8")
+
+if __name__ == "__main__":
+ """
+ python sample_ngram.py <input file> <corpus path> 1
+ this will generate the corpus for the given input file, if corpus specified at
+ corpus path is empty. Else it will recreate the corpus with the additional data.
+
+ python sample_ngram.py <corpus path> <start word> 2
+ this will generate the graph for the given start word in the given corpus at corpus path.
+
+ This is just a crude attempt, a lot more improvement is to be done.
+ """
+ if sys.argv[3] == "1":
+ ngv=NGramVisualizer ()
+ ngv.loadCorpus(sys.argv[1],sys.argv[2])
+ elif sys.argv[3] == "2":
+ printGraph(sys.argv[1],sys.argv[2])
diff --git a/silpa/modules/ngram/visualizer.py b/silpa/modules/ngram/visualizer.py
index 0debe28..e2c1136 100644
--- a/silpa/modules/ngram/visualizer.py
+++ b/silpa/modules/ngram/visualizer.py
@@ -22,18 +22,27 @@
# URL: http://www.smc.org.in
import pydot
import codecs
+import pickle
class NGramVisualizer:
depth=0
- def loadCorpus(self, corpus_file_name):
- graph_dict = dict()
+ def loadCorpus(self,new_file_name,corpus_file_name):
+ limiters = [".","!","?",",",";"]
+ try:
+ corpusfile = open(corpus_file_name)
+ except IOError:
+ graph_dict = dict()
+ else:
+ graph_dict = pickle.load(corpusfile)
+ # graph_dict = dict()
line = []
line_number = 0
rule_number = 0
- corpus_file = codecs. open(corpus_file_name,encoding='utf-8', errors='ignore')
+ corpus=""
+ data_file = codecs. open(new_file_name,encoding='utf-8', errors='ignore')
while 1:
line_number = line_number +1
- text = unicode( corpus_file.readline())
+ text = unicode( data_file.readline())
if text == "":
break
if text[0] == '#':
@@ -42,10 +51,22 @@ class NGramVisualizer:
line = text.strip()
if(line == ""):
continue
+ corpus=corpus+" "+line
+ sentences=[]
+ sentence = ""
+ start = 0
+ for index in range(0,len(corpus)):
+ for delimit in limiters:
+ if corpus[index] == delimit:
+ sentence = corpus[start:index]
+ sentences.append(sentence)
+ start = index+1
+ for line in sentences:
words=line.split(" ")
word_count=len(words)
prev_word=""
for word in words:
+ #print word
word=word.strip()
if(prev_word==""):
prev_word=word
@@ -56,8 +77,10 @@ class NGramVisualizer:
else:
graph_dict[prev_word]=word
prev_word=word
- prev_word=""
- return graph_dict
+ prev_word=""
+
+ pickle.dump(graph_dict,open(corpus_file_name,'w'))
+ #return graph_dict
def generate_full_graph(self, start_word, graph_dict,outputimage):
for key in graph_dict.iterkeys():
@@ -93,10 +116,12 @@ class NGramVisualizer:
return graph
-if __name__ == "__main__":
- ngv=NGramVisualizer ()
- graph_dict=ngv.loadCorpus ("hi.txt")
- graph=pydot.Dot()
- graph=ngv.generate_graph(graph_dict, graph,u"भारत")
- print graph.to_string().encode("utf-8")
+#if __name__ == "__main__":
+# ngv=NGramVisualizer ()
+# graph_dict = dict()
+# graph_dict=ngv.loadCorpus ("ml.txt",graph_dict)
+# pickle.dump(graph_dict,open('ngram_ml.txt','w'))
+# graph=pydot.Dot()
+# graph=ngv.generate_graph(graph_dict, graph,u"നീലത്തിമിംഗലങ്ങള്‍ക്ക്")
+# print graph.to_string().encode("utf-8")
#graph.write("ngvgraph-hi.png","dot", "raw" )