<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>极客路线</title>
    <link rel="alternate" type="text/html" href="http://blog.opensource.org.cn/raynix/" />
    <link rel="self" type="application/atom+xml" href="http://blog.opensource.org.cn/raynix/atom.xml" />
    <id>tag:blog.opensource.org.cn,2009-04-21:/raynix//9</id>
    <updated>2009-04-30T09:20:00Z</updated>
    <subtitle>Welcome to the REAL world, it sux, you gonna love it.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 5.01</generator>

<entry>
    <title>Unicode编码中的简繁中文互转</title>
    <link rel="alternate" type="text/html" href="http://blog.opensource.org.cn/raynix/2009/04/unicode.html" />
    <id>tag:blog.opensource.org.cn,2009:/raynix//9.490</id>

    <published>2009-04-30T09:12:39Z</published>
    <updated>2009-04-30T09:20:00Z</updated>

    <summary>现在简繁中文的转换已经不像从前那样，是gbk/ big5两种文字编码之间的转换，而是在同一个编码，Unicode，当中不同编码的映射。当然，简繁中文绝对不是简单的一一对应关系，有一对多的个别情 况，例如简体的&quot;后&quot; 对应繁体的 &quot;后&quot;和&quot;後&quot;。行业词汇也有差别，例如大陆说&quot;宽带&quot;，而港台说&quot;寬頻&quot;；大陆说&quot;操作系统&quot;，而港台说&quot;作業系統&quot; 等等。 因此当我决定用Python程序将森海塞尔简体中文网站转换为繁体中文网站时，我的计划分三个步骤： 提取行业高频关键字，找到简体和繁体的对应，编成词典利用现有的Python中文本地化工具包，将关键字之外的文字转换请港台Freelancer人工校对，确保本土化 第一步，我的词典替换程序在此： #coding:utf8import sys_dict = {&apos;森海塞尔&apos;: &apos;Sennheiser&apos;, &apos;耳机&apos;: &apos;耳筒&apos;, &apos;通通讯耳机&apos;: &apos;通話用耳機&apos;, &apos;话筒&apos;: &apos;咪高峰&apos;, &apos;包耳式&apos;: &apos;包圍耳殼式&apos;, &apos;换能原理&apos;: &apos;單元原理&apos;, &apos;阻抑&apos;: &apos;隔離&apos;,&apos;便携包&apos;: &apos;便攜袋&apos;, &apos;质保&apos;: &apos;保用&apos;, &apos;带宽&apos;: &apos;頻寬&apos;, &apos;调制方式&apos;: &apos;調節方式&apos;, &apos;信噪比&apos;: &apos;訊噪比&apos;, &apos;杂散辐射&apos;: &apos;雜散發射&apos; }_dict_s2t = dict((k,...</summary>
    <author>
        <name>raynix</name>
        
    </author>
    
        <category term="Python" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="unicode" label="Unicode" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="中文" label="中文" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.opensource.org.cn/raynix/">
        <![CDATA[<p>现在简繁中文的转换已经不像从前那样，是gbk/
big5两种文字编码之间的转换，而是在同一个编码，Unicode，当中不同编码的映射。当然，简繁中文绝对不是简单的一一对应关系，有一对多的个别情
况，例如简体的"后" 对应繁体的
"后"和"後"。行业词汇也有差别，例如大陆说"宽带"，而港台说"寬頻"；大陆说"操作系统"，而港台说"作業系統" 等等。</p>
<p>因此当我决定用Python程序将<a href="http://www.sennheiser.com.cn/" target="_blank">森海塞尔简体中文网站</a>转换为<a href="http://www.sennheiser.com.hk/" target="_blank">繁体中文网站</a>时，我的计划分三个步骤：</p>
<ol><li>提取行业高频关键字，找到简体和繁体的对应，编成词典</li><li>利用现有的Python中文本地化工具包，将关键字之外的文字转换</li><li>请港台Freelancer人工校对，确保本土化</li></ol>
<p>第一步，我的词典替换程序在此：</p>
<pre>#coding:utf8<br />import sys<br /><br />_dict = {'森海塞尔': 'Sennheiser', '耳机': '耳筒',  '通通讯耳机': '通話用耳機', '话筒': '咪高峰', '包耳式': '包圍耳殼式', '换能原理': '單元原理', '阻抑': '隔離',<br />'便携包': '便攜袋', '质保': '保用', '带宽': '頻寬', '调制方式': '調節方式', '信噪比': '訊噪比', '杂散辐射': '雜散發射' }<br /><br />_dict_s2t = dict((k, v) for k, v in _dict.iteritems())<br />_dict_t2s = dict((v, k) for k, v in _dict.iteritems())<br /><br />def translate2traditional(data):<br /><br />    for k, v in _dict_s2t.iteritems():<br />        data = data.replace(k, v)<br />    return data<br /><br />def translate2simplified(data):<br /><br />    for k, v in _dict_t2s.iteritems():<br />        data = data.replace(k, v)<br />    return data<br /><br />def test_dict():<br /><br />    global _dict_s2t, _dict_t2s<br />    for k, v in _dict_s2t.iteritems():<br />        print k, v<br /><br />    for k, v in _dict_t2s.iteritems():<br />        print k, v<br /><br />if __name__ == '__main__':<br /><br />    if len(sys.argv) &gt; 2:<br />        f = open(sys.argv[2], 'r')<br />        if sys.argv[1] == 's2t':<br />            print translate2traditional(f.read())<br />        elif sys.argv[1] == 't2s':<br />            print translate2simplified(f.read())<br />        else:<br />            print 'Wrong operation type.'<br />    else:<br />        print 'usage: python trans_dict.py [s2t | t2s] file.name'</pre>
<p>第二步，我利用的是<a href="http://code.google.com/p/pyzh/" target="_blank">pyzh中文工具包</a>中的fanjian.py完成。特别感谢pyzh项目组的全部成员和fanjian.py程序作者ne.manman和zsp007！</p>
<p>下面就交给香港的朋友了，希望不会累坏他:)</p>
<p>顺便说，Songbird很不错，有点山寨iTunes，那又怎样呢？毕竟Linux下面还没iTunes。</p>
<p><a href="http://getsongbird.com/" target="_blank"><img src="http://lh6.ggpht.com/_ZO8fi9o7nlg/SfbI1XAuY2I/AAAAAAAAA-4/Jh7xxolCcqk/s144/songbird.png" alt="" /><br />
Songbird</a></p> ]]>
        
    </content>
</entry>

<entry>
    <title>搬家到opensource.org.cn</title>
    <link rel="alternate" type="text/html" href="http://blog.opensource.org.cn/raynix/2009/04/opensourceorgcn.html" />
    <id>tag:blog.opensource.org.cn,2009:/raynix//9.485</id>

    <published>2009-04-21T05:16:40Z</published>
    <updated>2009-04-21T05:18:10Z</updated>

    <summary>先灌水占地儿～～...</summary>
    <author>
        <name>raynix</name>
        
    </author>
    
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.opensource.org.cn/raynix/">
        先灌水占地儿～～ 
        
    </content>
</entry>

<entry>
    <title>从6.7到0.01</title>
    <link rel="alternate" type="text/html" href="http://blog.opensource.org.cn/raynix/2009/04/67001.html" />
    <id>tag:blog.opensource.org.cn,2009:/raynix//9.487</id>

    <published>2009-04-20T05:56:59Z</published>
    <updated>2009-04-21T05:57:57Z</updated>

    <summary><![CDATA[编程果然不能偷懒！我这一偷懒，CPU就不知道要受多少累、冒多少热气了。一开始，我采用了很无脑的穷举方法，复杂度是O(n**2)，结果肯定正确的，但是长度一万的数组就可以耗去6.7秒的CPU时间。 raymond@raymond-laptop:~/_Work/Dev/python$ python le.py time:&nbsp; 0:00:06.708924 return:&nbsp; 1 0 0 0 之后，在高手提示下将复杂度降低到n (log n + 1) ，结果不错了。 raymond@raymond-laptop:~/_Work/Dev/python$ python le.py time:&nbsp; 0:00:00.010430 return:&nbsp; 1 0 0 0 对应改进后的代码： def leader3(array): t = len(array) //2 array.sort() p = -1 c =...]]></summary>
    <author>
        <name>raynix</name>
        
    </author>
    
        <category term="Python" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="算法" label="算法" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.opensource.org.cn/raynix/">
        <![CDATA[<p>编程果然不能偷懒！我这一偷懒，CPU就不知道要受多少累、冒多少热气了。一开始，我采用了很无脑的穷举方法，复杂度是O(n**2)，结果肯定正确的，但是长度一万的数组就可以耗去6.7秒的CPU时间。</p>
<blockquote><p>raymond@raymond-laptop:~/_Work/Dev/python$ python le.py<br />
time:&nbsp; <strong>0:00:06.708924</strong><br />
return:&nbsp; 1 0 0 0</p></blockquote>
<p>之后，在高手提示下将复杂度降低到n (log n + 1) ，结果不错了。</p>
<blockquote><p>raymond@raymond-laptop:~/_Work/Dev/python$ python le.py<br />
time:&nbsp; <strong>0:00:00.010430</strong><br />
return:&nbsp; 1 0 0 0</p></blockquote>
<p>对应改进后的代码：</p>
<pre>def leader3(array):<br />	t = len(array) //2<br />	array.sort()<br />	p = -1<br />	c = 1<br />	for i in array:<br />		if p == i :<br />			c+=1<br />			if c &gt; t:<br />				return 1<br />		else :<br />			p = i<br />			c = 1<br />		#print i, p, c<br /><br />	return 0</pre>
<p>这是我要记住的一课。</p> ]]>
        
    </content>
</entry>

<entry>
    <title>偷闲，写了个初级二叉树排序</title>
    <link rel="alternate" type="text/html" href="http://blog.opensource.org.cn/raynix/2009/04/post.html" />
    <id>tag:blog.opensource.org.cn,2009:/raynix//9.486</id>

    <published>2009-04-14T05:37:24Z</published>
    <updated>2009-04-21T05:59:25Z</updated>

    <summary><![CDATA[二叉树是计算机算法中普遍采用的数据结构。在所有排序算法中具有高效率的二叉树排序就是基于此结构。我抽空用新学的Python写了一个试试： class node: left = None right = None value = 0 def __init__(self, v): self.value = v def walk(self): r = [] if self.left: r.extend(self.left.walk()) r.append(self.value) if self.right: r.extend(self.right.walk()) return r def insert(self, n): if self.value &lt; n: if...]]></summary>
    <author>
        <name>raynix</name>
        
    </author>
    
        <category term="Python" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="binarytree" label="binary-tree" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.opensource.org.cn/raynix/">
        <![CDATA[<p>二叉树是计算机算法中普遍采用的数据结构。在<a href="http://en.wikipedia.org/wiki/Sort_algorithm" target="_blank">所有排序算法</a>中具有高效率的<a href="http://blog.csdn.net/andylin02/archive/2008/01/27/2068596.aspx" target="_blank">二叉树排序</a>就是基于此结构。我抽空用新学的Python写了一个试试：</p>
<pre>class node:<br />	left = None<br />	right = None<br />	value = 0<br /><br />	def __init__(self, v):<br />		self.value = v<br /><br />	def walk(self):<br />		r = []<br />		if self.left:<br />			r.extend(self.left.walk())<br />		r.append(self.value)<br />		if self.right:<br />			r.extend(self.right.walk())<br />		return r<br /><br />	def insert(self, n):<br />		if self.value &lt; n:<br />			if self.right:<br />				self.right.insert(n)<br />			else:<br />				self.right = node(n)<br />		else:<br />			if self.left:<br />				self.left.insert(n)<br />			else:<br />				self.left = node(n)<br /><br />s = [21,545,65,33,1,2324,232,42]<br />p = node(s[0])<br />for i in s[1:]:<br />	p.insert(i)<br />print p.walk()</pre>
<p>运行结果</p>
<blockquote><p>python bi-tree.py<br />
[1, 21, 33, 42, 65, 232, 545, 2324]</p></blockquote>
<p>结论：一次编写，基本正确。python很合我的路子啊。</p>
<p>BTW 用&lt;pre&gt;贴python code很正点:)</p> ]]>
        
    </content>
</entry>

</feed>
