# -*- coding: utf-8 -*-

import zlib
import cPickle
import os.path

class Entropy:
    def __init__(self):      
		self.entro = []
	
    def register(self, name, corpus):
        """
        register a text as corpus for a language or author.
        <name> may also be a function or whatever you need
        to handle the result.
        """
        corpus = str(corpus)
        ziplen = len(zlib.compress(corpus))
        print name, ziplen
	self.entro.append((name, corpus, ziplen))

    def guess(self, part):
        """
        <part> is a text that will be compared with the registered
        corpora and the function will return what you defined as
        <name> in the registration process.
        """
        what = None
        diff = 0
        part = str(part)

        for name, corpus, ziplen in self.entro:
		nz = len(zlib.compress(corpus+part)) - ziplen
		if diff==0 or nz<diff:
                	what = name
        		diff = nz
        return what


if __name__=="__main__":
	# Load corpra from file
	if os.path.exists('entropy'):
		e=cPickle.load(open('entropy', 'r'))
	else:	
		e = Entropy()
		index = open('UDHR_20021124/index.txt', 'r')		
		for i in index.readlines():
			print i
			filename = i.split()[0]
			lang = ''.join(i.split()[1:])
			f=open('UDHR_20021124/'+filename+'_print.htm', 'r')
			e.register(lang, f.read())
			f.close()
		index.close()
		output = open('entropy', 'w')
		cPickle.dump(e, output)

    	print "Germen", e.guess("""
    Laut Kundenaussagen ist XYZ unter Windows 95 A und B sowie unter Windows
    NT einsatzfähig. Leider kann von unserer Seite aus unter diesen
    Betriebssystemen kein umfassender Support gewährleistet werden.
    """)

    	print "English", e.guess("""
    Now that you are all excited about Python, you'll want to examine
    it in some more detail. Since the best way to learn a language is
    using it, you are invited here to do so.
    """)
	
	print "Chinese", e.guess("""
符号主义，又称为逻辑主义、心理学派或计算机学派，其原理主要为物理符号系统（即符号操作系统）假设和有限合理性原理。符号主义认为人工智能源于数理逻辑。计算机出现后，在计算机上实现了逻辑演绎系统。其有代表性的成果为启发式程序 LT 逻辑理论家，证明了 38 条数学定理，表明了可以应用计算机研究人的思维过程，模拟人类智能活动。正是这些符号主义者，早在 1956 年首先采用“人工智能”这个术语。后来又发展了启发式算法→专家系统→知识工程理论与技术，并在 20 世纪 80 年代取得很大发展。符号主义曾长期一枝独秀，为人工智能的发展做出重要贡献，尤其是专家系统的成功开发与应用，为人工智能走向工程应用和实现理论联系实际具有特别重要意义。连接主义，又称为仿生学派或生理学派，其原理主要为神经网络及神经网络间的连接机制与学习算法。连接主义认为人工智能源于仿生学，特别是人脑模型的研究。它的代表性成果是 1943 年由生理学家麦卡洛克和数理逻辑学家皮茨创立的脑模型，即 MP 模型，开创了用电子装置模仿人脑结构和功能的新途径。它从神经元开始进而研究神经网络模型和脑模型，开辟了人工智能的又一发展道路。20 世纪 60－70 年代，连接主义，尤其是对以感知机为代表的脑模型的研究曾出现过热潮，直到 Hopfield教授在 1982 年和 1984 年提出用硬件模拟神经网络时，连接主义又重新抬头。1986 年鲁梅尔哈特等人提出多层网络中的反向传播（BP）算法。此后，连结主义势头大振，从模型到算法，从理论分析到工程实现，为神经网络计算机走向市场打下基础。行为主义（Actionism），又称进化主义（Evolutionism）或控制论学派（Cyberneticsism），其原理为控制论及感知—动作型控制系统。行为主义认为人工智能源于控制论。控制论思想早在 20 世纪40-50 年代就成为时代思潮的重要部分，影响了早期的人工智能工作者。维纳和麦克洛等人提出的控制论和自组织系统影响了许多领域。控制论的早期研究工作重点是模拟人在控制过程中的智能行为和作用，如对自寻优、自适应、自校正、自镇定、自组织和自学习等控制论系统的研究，并进行“控制论动物”的研制。到 60－70 年代，上述这些控制论系统的研究取得一定进展，播下智能控制和智能机器人的种子，并在 80 年代诞生了智能控制和智能机器人系统""")

	print "Japanese", e.guess("""
日本語は、主に日本国内で使用される。話者人口についての調査は国内・国外を問わずいまだないが、日本の人口に基づいて考えられることが一般的である。

日本国内に、法令上、日本語を公用語ないし国語と定める直接の規定はない。しかし、裁判所法においては「裁判所では、日本語を用いる」（同法74条）とされ、文字・活字文化振興法においては「国語」と「日本語」が同一視されており（同法3条、9条）、その他多くの法令において、日本語が唯一の公用語ないし国語であることが当然の前提とされている。実際に、法文を含めて公用文はすべて日本語のみが用いられ、学校教育では日本語が「国語」として教えられている。

日本国外では、主として、中南米（ブラジル・ペルー・ボリビア・ドミニカ共和国・パラグアイなど）やハワイなどの日本人移民のあいだに日本語の使用がみられるが[1] [2] [3]、3世・4世と世代が下るにしたがって日本語を話さない人が多くなっているのが実情である[4]。また、第二次世界大戦の終結以前に日本領ないし日本の勢力下にあった朝鮮半島・台湾・中国の一部・樺太（サハリン）・旧南洋諸島（現在の北マリアナ諸島・パラオ・マーシャル諸島・ミクロネシア連邦）などの地域では、日本語教育を受けた人々の中に、現在でも日本語を記憶して話す人がいる[5]。台湾では先住民の異なる部族同士の会話に日本語が用いられることがあるという[6]。

日本国外の日本語学習者は、韓国の約90万人、中国の約40万人、オーストラリアの約40万人をはじめ、アジア・大洋州地域を中心に約235万人となっている。日本語教育が行われている地域は、120か国と7地域に及んでいる[7]。また、日本国内の日本語学習者は、アジア地域の約10万人を中心として約13万人となっている
""")
	print "Korean", e.guess("""
[편집] 외교 문제

    * 영토
          o 센카쿠 제도(조어대라고도 함): 중화인민공화국과 일본은 센카쿠 제도(조어대)가 각각 자신의 영토라고 주장하고 있으며(중화민국도 센카쿠 제도에 대한 영유권을 주장하고 있다), 중화인민공화국에서는 센카쿠 제도가 타이완 성에 속한다고 주장하고 있다.
          o 중화인민공화국은 인도 영토인 아루나찰프라데시에 대한 영유권을 주장하고 있고, 인도는 중국이 점령하고 있는 아크사이친에 대한 영유권을 주장하고 있다.(중화인민공화국의 주권을 인정하지 않는 중화민국도 아루나찰프라데시와 아크사이친에 대한 영유권을 주장하고 있다.)
          o 이어도와 파랑초: 대한민국과 중화인민공화국 사이에서는 이어도와 파랑초 문제가 놓여 있다. 중화인민공화국은 이어도와 파랑초가 섬이 아니라 바다밑에 있는 암초라고 주장하고 있다.
          o 기타 영토 문제: 그 외에도 남중국해에 위치한 난사 군도문제도 있다. 예전에는 소련과 중소 국경 분쟁이 일어났다. 하지만 1991년 5월 16일에 체결된 중소 국경 협정으로 양측은 이들 섬이 중화인민공화국의 영토라는 것에 합의했다.
          o 백두산 일부 지역: 중화인민공화국과 조선민주주의인민공화국 국경에 있는 백두산(창바이 산) 일대에서 중화인민공화국이 영유하고 있는 일부 지역에 대해 대한민국이 영유권을 주장하고 있다.
          o 중화인민공화국과 중화민국은 각각 상대방의 영토 전체에 대한 영유권을 주장하고 있다.

    * 역사 왜곡
          o 동북공정 : 대한민국과 중화인민공화국 사이에서 동북공정이 주요 이슈로 다루어지고 있다. 중화인민공화국에서는 고조선, 고구려, 발해를 중국의 역사라고 주장하고 있다.
          o 다른 나라와의 갈등 : 이외에도 베트남, 몽골 등 주변의 이웃 국가와도 역사 문제로 서로 대립하고 있다. 네이멍구 자치구에 징기스칸의 묘를 만들어 몽골의 역사를 왜곡하고 있다.
    * 양안문제 : 양안문제는 중화인민공화국과 중화민국 간에 벌어지고 있는 문제이다.
""")
	#test = open('test.txt', 'r')
	#print "Chinese", e.guess( test.read())
	
	#test3 = open('kor.txt', 'r')
	#print "Kor", e.guess(test3.read())

