<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>鬼の领地 &#187; 贴吧</title>
	<atom:link href="http://blog.upsuper.org/tag/%e8%b4%b4%e5%90%a7/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.upsuper.org</link>
	<description>the place where there are some ghost appearing...</description>
	<lastBuildDate>Wed, 19 Oct 2011 13:21:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>寻找更高仿的 ID 第二季</title>
		<link>http://blog.upsuper.org/finding-higher-imitation-of-id-second-season/</link>
		<comments>http://blog.upsuper.org/finding-higher-imitation-of-id-second-season/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 07:31:17 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[小程序]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[贴吧]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=1172</guid>
		<description><![CDATA[继上一篇文章之后，我又下大力气对这个程序做了许多修改，在精确度和速度方面似乎都有些许提高。在此推出第二季~ 使用真正的12px宋体 在上一次的程序中使用的 PIL 似乎是因为不支持宋体 ttc 文件中对于小字体下优化的点阵形式，才在选择小于 19px 的字号时不能正确渲染汉字。考虑到这一点，我就想到把 ttc 文件里面 12px 的点阵字体单独提取出来使用，毕竟贴吧上面显示 ID 都是用这个字号显示的。 使用 FontForge 提取出来了 simsun-12.bdf 文件，就是宋体 12px 下的点阵。参考 PIL 的手册，发现 PIL 不能直接使用 .bdf 文件，需要使用一个叫做 pilfont 的脚本转换成专有的 .pil 文件才行。我想转换就转换呗。simsun-12.bdf 一个 2.4MB 的文件，转换完就剩不到 100KB，我就觉得肯定有问题，用 PIL 导入，发现还是不能渲染中文。后来知道，这个 .pil 文件根本不支持非拉丁字母的字符，它的储存空间限定了 256 个字符…… 无奈了，这意味着 PIL 完全无法支持中文点阵了…… 当然，办法总归是有的，那就是——抛弃 PIL！为什么我能有这样的想法呢，因为看到 .bdf 文件是 UNIX 标准的。UNIX 标准意味着什么呢？记不记得 UNIX 有一个非常好的传统叫做，尽量使用纯文本。是的，这虽然让有些文件会变得太大，不过同时也让这些东西更容易被其他程序读取，而 .bdf [...]]]></description>
			<content:encoded><![CDATA[<p>继上一篇文章之后，我又下大力气对这个程序做了许多修改，在精确度和速度方面似乎都有些许提高。在此推出第二季~</p>
<h3>使用真正的12px宋体</h3>
<p>在上一次的程序中使用的 PIL 似乎是因为不支持宋体 ttc 文件中对于小字体下优化的点阵形式，才在选择小于 19px 的字号时不能正确渲染汉字。考虑到这一点，我就想到把 ttc 文件里面 12px 的点阵字体单独提取出来使用，毕竟贴吧上面显示 ID 都是用这个字号显示的。</p>
<p>使用 FontForge 提取出来了 simsun-12.bdf 文件，就是宋体 12px 下的点阵。参考 PIL 的手册，发现 PIL 不能直接使用 .bdf 文件，需要使用一个叫做 pilfont 的脚本转换成专有的 .pil 文件才行。我想转换就转换呗。simsun-12.bdf 一个 2.4MB 的文件，转换完就剩不到 100KB，我就觉得肯定有问题，用 PIL 导入，发现还是不能渲染中文。后来知道，这个 .pil 文件根本不支持非拉丁字母的字符，它的储存空间限定了 256 个字符……</p>
<p>无奈了，这意味着 PIL 完全无法支持中文点阵了……</p>
<p>当然，办法总归是有的，那就是——抛弃 PIL！为什么我能有这样的想法呢，因为看到 .bdf 文件是 UNIX 标准的。UNIX 标准意味着什么呢？记不记得 UNIX 有一个非常好的传统叫做，尽量使用纯文本。是的，这虽然让有些文件会变得太大，不过同时也让这些东西更容易被其他程序读取，而 .bdf 恰好即使这么一种文件。</p>
<p>这样读取 .bdf 点阵字体文件的程序自己写不就好了，什么额外的库都不需要……当然，纠错性极弱就是了~</p>

<div class="wp_codebox"><table><tr id="p11725"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
</pre></td><td class="code" id="p1172code5"><pre class="python" style="font-family:monospace;">line_count = <span style="color: #ff4500;">0</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">global</span> line_count
    line_count += <span style="color: #ff4500;">1</span>
    line = f.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> line:
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> line<span style="color: black;">&#91;</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'simsun-12.bdf'</span>, <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> f:
    chars = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
    line = <span style="color: black;">&#91;</span><span style="color: #483d8b;">''</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">try</span>:
        <span style="color: #808080; font-style: italic;"># 获得字符总数</span>
        <span style="color: #ff7700;font-weight:bold;">while</span> line<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= <span style="color: #483d8b;">'CHARS'</span>:
            line = read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;"># 读取所有字符</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
            <span style="color: #ff7700;font-weight:bold;">assert</span> read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'STARTCHAR'</span>
            line = read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
            <span style="color: #808080; font-style: italic;"># 编码</span>
            <span style="color: #ff7700;font-weight:bold;">assert</span> line<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'ENCODING'</span>
            char = <span style="color: #008000;">unichr</span><span style="color: black;">&#40;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            line = read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
            <span style="color: #808080; font-style: italic;"># 绘制参数</span>
            <span style="color: #ff7700;font-weight:bold;">assert</span> line<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'BBX'</span>
            width, height, x1, y1 = <span style="color: black;">&#91;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> line<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            x0, y0 = <span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span> + x1, <span style="color: #ff4500;">12</span> - y1 - height<span style="color: black;">&#41;</span>
            <span style="color: #808080; font-style: italic;"># 准备绘制文字</span>
            base_image = <span style="color: black;">&#91;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">14</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">for</span> y <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">14</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
            <span style="color: #808080; font-style: italic;"># 读取并绘制文字</span>
            line = read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">assert</span> line<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'BITMAP'</span>
            <span style="color: #ff7700;font-weight:bold;">for</span> y <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>y0, y0 + height<span style="color: black;">&#41;</span>:
                line = read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
                bits = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>line, <span style="color: #ff4500;">16</span><span style="color: black;">&#41;</span>
                bits <span style="color: #66cc66;">&gt;&gt;</span>= <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">4</span> - width
                <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>x0 + width - <span style="color: #ff4500;">1</span>, x0 - <span style="color: #ff4500;">1</span>, -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:
                    base_image<span style="color: black;">&#91;</span>y<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>x<span style="color: black;">&#93;</span> = bits <span style="color: #66cc66;">&amp;</span> <span style="color: #ff4500;">1</span>
                    bits <span style="color: #66cc66;">&gt;&gt;</span>= <span style="color: #ff4500;">1</span>
            chars<span style="color: black;">&#91;</span>char<span style="color: black;">&#93;</span> = base_image
            <span style="color: #808080; font-style: italic;"># 结束这个文字</span>
            line = read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">assert</span> line<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'ENDCHAR'</span>
        line = read_split<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">assert</span> line<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'ENDFONT'</span>
    <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">AssertionError</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'line'</span>, line_count
        <span style="color: #ff7700;font-weight:bold;">raise</span></pre></td></tr></table></div>

<p>这样所有的字符就被读入，并变成一个单色像素二位数组了。</p>
<p>当然，这个性能很低，在我的机器上转换读取文件的2W+字符大概需要 18s，这可能也是为什么 PIL 要选择进行转换。事实上，使用纯文本储存一直以来都给 UNIX 风格的这一类软件带来一定性能缺陷。不过其实，这很值得，因为方便。</p>
<p>不过这个时间确实是太长了，更何况我们到目前为止还什么都没处理。怎么办呢？两个想法：一、优化代码；二、保存处理的数据。</p>
<p>第一种，基本上是没什么希望了，而且即使能优化，估计效果也不会太好，可能省个几秒封顶了。第二个显然不是个坏想法。</p>
<p>Python 在数据的持续化方面还是有很多现成的东西的，比如 pickle 什么的。不过那个速度太慢，而且是纯文本！好吧，偶尔我也会不喜欢纯文本，因为在这里意义不大……因此选择了 marshal。marshal 也是一个用于数据持续化的库，不过仅能对 Python 的内部类型进行。我会看中它最重要的原因就是它的应用范围极其有限，只能持续化内部类型。如果一个 Python 标准库，它有很明显的限制，却没有标明不推荐或在新版中被剔除，说明它必然有一个其他库不可及的优势。对于 marshal，我猜它的优势就是效率。</p>
<p>使用 marshal 就很简单了……</p>

<div class="wp_codebox"><table><tr id="p11726"><td class="line_numbers"><pre>62
63
</pre></td><td class="code" id="p1172code6"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">marshal</span>
<span style="color: #dc143c;">marshal</span>.<span style="color: black;">dump</span><span style="color: black;">&#40;</span>chars, <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'base_image'</span>, <span style="color: #483d8b;">'wb'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>这样后面的处理不需要不断重复这个低效的步骤了~</p>
<h3>处理文字图像</h3>
<p>原来是用 PIL 处理文字图像，现在抛弃 PIL 了，就得自己写了……不过这样也很好，自由发挥的空间很大了~</p>
<p>我猜用的是 Matrix67 大牛的那种在附近留阴影的方法，不过似乎我写的不够好就是了，怎么测试效果都不大理想。除此之外，纯 Python 实现的算法效率和 PIL 这种包装还是没得比，很简单的算法却慢的不得了……</p>
<p>下面是目前的处理代码：</p>

<div class="wp_codebox"><table><tr id="p11727"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="code" id="p1172code7"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #808080; font-style: italic;"># - * - coding: utf8 - * -</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">marshal</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">copy</span>
&nbsp;
base_chars = <span style="color: #dc143c;">marshal</span>.<span style="color: black;">load</span><span style="color: black;">&#40;</span><span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'base_image'</span>, <span style="color: #483d8b;">'rb'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
chars = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> char, image <span style="color: #ff7700;font-weight:bold;">in</span> base_chars.<span style="color: black;">iteritems</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    new_image = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> y <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">14</span><span style="color: black;">&#41;</span>:
        new_row = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">14</span><span style="color: black;">&#41;</span>:
            <span style="color: #ff7700;font-weight:bold;">if</span> image<span style="color: black;">&#91;</span>y<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>x<span style="color: black;">&#93;</span>:
                value = <span style="color: #ff4500;">81</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                value = <span style="color: #ff4500;">0</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> y <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">and</span> image<span style="color: black;">&#91;</span>y-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>x<span style="color: black;">&#93;</span>:
                value += <span style="color: #ff4500;">4</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> y <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">13</span> <span style="color: #ff7700;font-weight:bold;">and</span> image<span style="color: black;">&#91;</span>y+<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>x<span style="color: black;">&#93;</span>:
                value += <span style="color: #ff4500;">4</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> x <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">and</span> image<span style="color: black;">&#91;</span>y<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>x-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>:
                value += <span style="color: #ff4500;">4</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> x <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">13</span> <span style="color: #ff7700;font-weight:bold;">and</span> image<span style="color: black;">&#91;</span>y<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>x+<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>:
                value += <span style="color: #ff4500;">4</span>
            new_image.<span style="color: black;">append</span><span style="color: black;">&#40;</span>value<span style="color: black;">&#41;</span>
    chars<span style="color: black;">&#91;</span>char<span style="color: black;">&#93;</span> = new_image
&nbsp;
<span style="color: #dc143c;">marshal</span>.<span style="color: black;">dump</span><span style="color: black;">&#40;</span>chars, <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'advanced_data'</span>, <span style="color: #483d8b;">'wb'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>处理效果不是很理想就是了，耗时大概也是 30s+。</p>
<h3>寻找相似字符</h3>
<p>其实这个部分就是一样的了……直接贴代码好了……</p>

<div class="wp_codebox"><table><tr id="p11728"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
</pre></td><td class="code" id="p1172code8"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #808080; font-style: italic;"># - * - coding: utf8 - * -</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">marshal</span>
&nbsp;
chars = <span style="color: #dc143c;">marshal</span>.<span style="color: black;">load</span><span style="color: black;">&#40;</span><span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'advanced_data'</span>, <span style="color: #483d8b;">'rb'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> image_diff<span style="color: black;">&#40;</span>image1, image2<span style="color: black;">&#41;</span>:
    ret = <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> v1, v2 <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">zip</span><span style="color: black;">&#40;</span>image1, image2<span style="color: black;">&#41;</span>:
        ret += <span style="color: black;">&#40;</span>v1 - v2<span style="color: black;">&#41;</span> <span style="color: #66cc66;">**</span> <span style="color: #ff4500;">2</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> ret
&nbsp;
remember_number = <span style="color: #ff4500;">5</span>
<span style="color: #ff7700;font-weight:bold;">try</span>:
    searched = <span style="color: #dc143c;">marshal</span>.<span style="color: black;">load</span><span style="color: black;">&#40;</span><span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'searched_chars'</span>, <span style="color: #483d8b;">'rb'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">IOError</span>:
    searched = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:
    input_string = <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span><span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'ID: '</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'utf8'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> input_string:
        <span style="color: #ff7700;font-weight:bold;">break</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> char <span style="color: #ff7700;font-weight:bold;">in</span> input_string:
        <span style="color: #ff7700;font-weight:bold;">if</span> char <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> chars:
            <span style="color: #ff7700;font-weight:bold;">continue</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> char <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> searched:
            diff_data = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
            image = chars<span style="color: black;">&#91;</span>char<span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">for</span> c, v <span style="color: #ff7700;font-weight:bold;">in</span> chars.<span style="color: black;">iteritems</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
                <span style="color: #ff7700;font-weight:bold;">if</span> c == char:
                    <span style="color: #ff7700;font-weight:bold;">continue</span>
                diff_data.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>image_diff<span style="color: black;">&#40;</span>v, image<span style="color: black;">&#41;</span>, c<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            diff_data.<span style="color: black;">sort</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            searched<span style="color: black;">&#91;</span>char<span style="color: black;">&#93;</span> = diff_data<span style="color: black;">&#91;</span>:remember_number<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> char,
        <span style="color: #ff7700;font-weight:bold;">for</span> item <span style="color: #ff7700;font-weight:bold;">in</span> searched<span style="color: black;">&#91;</span>char<span style="color: black;">&#93;</span>:
            <span style="color: #ff7700;font-weight:bold;">print</span> u<span style="color: #483d8b;">'({0}, {1})'</span>.<span style="color: black;">format</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">*</span>item<span style="color: black;">&#41;</span>,
        <span style="color: #ff7700;font-weight:bold;">print</span>
    <span style="color: #ff7700;font-weight:bold;">print</span>
&nbsp;
<span style="color: #dc143c;">marshal</span>.<span style="color: black;">dump</span><span style="color: black;">&#40;</span>searched, <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'searched_chars'</span>, <span style="color: #483d8b;">'wb'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>和上次不同的是查找过的字会被保存下来，效率可以高一些……</p>
<h3>继续改进</h3>
<p>现在的主要问题就是如何提高相似度的识别精度了……目前的想法是通过逐像素比对测试两个字的相似度，最多加一些模糊化什么的处理。doggy 提出一个想法是计算连通区域面积的比例，我个人认为不大可行……我的想法是识别文字的笔画，把文字的骨架弄出来，然后对比什么的，可能效果更好吧？</p>
<p>不知道各位还有没有其他什么想法？</p>
<h3>下载</h3>
<p>最后是完整版的目前的程序以及已经生成的数据，各位有兴趣可以直接拿来试用了……<a href="http://down.upsuper.org/find-similar-character.tar.bz2">find-similar-character.tar.bz2</a> (1.7MB)</p>
<h3>参考资料</h3>
<ul>
<li><a href="http://www.pkucn.com/viewthread.php?tid=202692">我想把simsun.ttf里的12号点阵字体单独提取出来做成一个ttf &#8211; 北大中文论坛</a></li>
<li><a href="http://en.wikipedia.org/wiki/Glyph_Bitmap_Distribution_Format">Glyph Bitmap Distribution Format &#8211; Wikipedia</a></li>
<li><a href="http://www.adobe.com/devnet/font/pdfs/5005.BDF_Spec.pdf">Glyph Bitmap Distribution Format (BDF) Specification &#8211; Adobe Developer Support</a></li>
<li><a href="http://docs.python.org/library/marshal.html">marshal — Internal Python object serialization &#8211; Python documentation</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/finding-higher-imitation-of-id-second-season/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>寻找更高仿的 ID</title>
		<link>http://blog.upsuper.org/finding-higher-imitation-of-id/</link>
		<comments>http://blog.upsuper.org/finding-higher-imitation-of-id/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 10:21:43 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[小程序]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[贴吧]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=1169</guid>
		<description><![CDATA[今天大学军训完了，不想做什么正经事，就想到前一段时间想做的寻找相似汉字的程序，用以寻找更高仿的贴吧 ID。用程序来寻找相似汉字，从另一个角度，也是从 Matrix67 大牛的一篇日志里得到的启发。不过 Matrix67 大牛使用的是 Mathematica 来寻找，我不大会 Mathematica，就想用我熟悉的 Python 来解决，毕竟 Python 是一个很强大的东西~ 其实寻找的思路很简单，就是把某个汉字当作图片弄出来，让后对比两个图片的相似程度。因此做这个程序的第一步就是研究如何用 Python 处理图片和文字。Python 有一个非常著名的第三方库，名叫 Python Imaging Library，简称 PIL，就是专门用来处理图片的。 文字 to 图像 PIL 可以很轻松的将文字转换为图像，并且提供了虽然不能说是强大，但暂时够用的图像处理函数。 处理文字生成的图像，显然和彩色没有太大关系，因此可以使用灰度图像节省计算需要的空间和时间。此外我们知道，文字到图像有一个中间媒介，就是字体。因此我们必须先确定我们需要的字体和大小。用 Firebug 考查贴吧用于显示 ID 的字体和大小，发现是宋体 12px。这样参考 PIL 的手册，就有了最基本的文字到图片的代码了： 1 2 3 4 5 6 import Image, ImageDraw, ImageFont image = Image.new&#40;'L', &#91;14, 14&#93;, 255&#41; draw = ImageDraw.Draw&#40;image&#41; font = [...]]]></description>
			<content:encoded><![CDATA[<p>今天大学军训完了，不想做什么正经事，就想到前一段时间想做的寻找相似汉字的程序，用以寻找更高仿的贴吧 ID。用程序来寻找相似汉字，从另一个角度，也是从 Matrix67 大牛的一篇日志里得到的启发。不过 Matrix67 大牛使用的是 Mathematica 来寻找，我不大会 Mathematica，就想用我熟悉的 Python 来解决，毕竟 Python 是一个很强大的东西~<br />
<span id="more-1169"></span><br />
其实寻找的思路很简单，就是把某个汉字当作图片弄出来，让后对比两个图片的相似程度。因此做这个程序的第一步就是研究如何用 Python 处理图片和文字。Python 有一个非常著名的第三方库，名叫 Python Imaging Library，简称 PIL，就是专门用来处理图片的。</p>
<h3>文字 to 图像</h3>
<p>PIL 可以很轻松的将文字转换为图像，并且提供了虽然不能说是强大，但暂时够用的图像处理函数。</p>
<p>处理文字生成的图像，显然和彩色没有太大关系，因此可以使用灰度图像节省计算需要的空间和时间。此外我们知道，文字到图像有一个中间媒介，就是字体。因此我们必须先确定我们需要的字体和大小。用 Firebug 考查贴吧用于显示 ID 的字体和大小，发现是宋体 12px。这样参考 PIL 的手册，就有了最基本的文字到图片的代码了：</p>

<div class="wp_codebox"><table><tr id="p116914"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p1169code14"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> Image, ImageDraw, ImageFont
image = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'L'</span>, <span style="color: black;">&#91;</span><span style="color: #ff4500;">14</span>, <span style="color: #ff4500;">14</span><span style="color: black;">&#93;</span>, <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span>
draw = ImageDraw.<span style="color: black;">Draw</span><span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
font = ImageFont.<span style="color: black;">truetype</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'simsun.ttc'</span>, <span style="color: #ff4500;">12</span><span style="color: black;">&#41;</span>
draw.<span style="color: black;">text</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>, u<span style="color: #483d8b;">'好'</span>, font=font<span style="color: black;">&#41;</span>
image.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'hw.png'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>看过去这个代码是正确的，不过在查看 hw.png 后，我发现并没有出现预期的“好”字，而是一堆混乱的东西，不知何故。后经过不断实验，发现只有当初始的文字大小设定为19或以上时，文字才可以被正确地绘制出来，_-b</p>
<p>于是不得不修改这段代码，让它先绘制一个大的，再缩放成需要的大小：</p>

<div class="wp_codebox"><table><tr id="p116915"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p1169code15"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> Image, ImageDraw, ImageFont
image = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'L'</span>, <span style="color: black;">&#91;</span><span style="color: #ff4500;">28</span>, <span style="color: #ff4500;">28</span><span style="color: black;">&#93;</span>, <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span>
draw = ImageDraw.<span style="color: black;">Draw</span><span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
font = ImageFont.<span style="color: black;">truetype</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'simsun.ttc'</span>, <span style="color: #ff4500;">24</span><span style="color: black;">&#41;</span>
draw.<span style="color: black;">text</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>, u<span style="color: #483d8b;">'好'</span>, font=font<span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># 抗锯齿方式缩放</span>
image = image.<span style="color: black;">resize</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">14</span>, <span style="color: #ff4500;">14</span><span style="color: black;">&#41;</span>, Image.<span style="color: black;">ANTIALIAS</span><span style="color: black;">&#41;</span>
image.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'hw.png'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>效果还不错。</p>
<h3>枚举汉字</h3>
<p>然后来找一种方式来枚举汉字。参考维基百科的 GB2312 条目，确定了 GB2312 中汉字区的编码，为第一个字节 0xB0-0xF7，第二个字节 0xA1-0xFE，其中 D7FA-D7FE 是空的，这样共有6763个汉字拿来搞。</p>
<p>其实还是挺少的就是了……</p>
<p>于是枚举汉字的代码：</p>

<div class="wp_codebox"><table><tr id="p116916"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p1169code16"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>0xB0, 0xF8<span style="color: black;">&#41;</span>:
    chr_i = <span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> j <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>0xA1, 0xFF<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> i == 0xD7 <span style="color: #ff7700;font-weight:bold;">and</span> j <span style="color: #66cc66;">&gt;</span>= 0xFA <span style="color: #ff7700;font-weight:bold;">and</span> j <span style="color: #66cc66;">&lt;</span>= 0xFE:
            <span style="color: #ff7700;font-weight:bold;">continue</span>
        char = <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>chr_i + <span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>j<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'gb18030'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> char,</pre></td></tr></table></div>

<h3>初步成果</h3>
<p>现在结合上面两段，得到了下面的初步代码：</p>

<div class="wp_codebox"><table><tr id="p116917"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td class="code" id="p1169code17"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #808080; font-style: italic;"># - * - coding: UTF-8 - * -</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> Image, ImageDraw, ImageFont, ImageFilter
&nbsp;
font = ImageFont.<span style="color: black;">truetype</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'simsun.ttc'</span>, <span style="color: #ff4500;">24</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> get_char_data<span style="color: black;">&#40;</span>char<span style="color: black;">&#41;</span>:
    image = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'L'</span>, <span style="color: black;">&#91;</span><span style="color: #ff4500;">28</span>, <span style="color: #ff4500;">28</span><span style="color: black;">&#93;</span>, <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span>
    draw = ImageDraw.<span style="color: black;">Draw</span><span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
    draw.<span style="color: black;">text</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>, char, font=font<span style="color: black;">&#41;</span>
    image = image.<span style="color: black;">resize</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">14</span>, <span style="color: #ff4500;">14</span><span style="color: black;">&#41;</span>, Image.<span style="color: black;">ANTIALIAS</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">list</span><span style="color: black;">&#40;</span>image.<span style="color: black;">getdata</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> diff_of_data<span style="color: black;">&#40;</span>data1, data2<span style="color: black;">&#41;</span>:
    ret = <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">zip</span><span style="color: black;">&#40;</span>data1, data2<span style="color: black;">&#41;</span>:
        ret += <span style="color: #008000;">abs</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> - i<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> ret
&nbsp;
chars = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>0xB0, 0xF8<span style="color: black;">&#41;</span>:
    chr_i = <span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> j <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>0xA1, 0xFF<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> i == 0xD7 <span style="color: #ff7700;font-weight:bold;">and</span> j <span style="color: #66cc66;">&gt;</span>= 0xFA <span style="color: #ff7700;font-weight:bold;">and</span> j <span style="color: #66cc66;">&lt;</span>= 0xFE:
            <span style="color: #ff7700;font-weight:bold;">continue</span>
        char = <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>chr_i + <span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>j<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'gb18030'</span><span style="color: black;">&#41;</span>
        chars<span style="color: black;">&#91;</span>char<span style="color: black;">&#93;</span> = get_char_data<span style="color: black;">&#40;</span>char<span style="color: black;">&#41;</span>
&nbsp;
remember_number = <span style="color: #ff4500;">5</span>
input_string = <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span><span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'ID: '</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'utf8'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> input_char <span style="color: #ff7700;font-weight:bold;">in</span> input_string:
    <span style="color: #ff7700;font-weight:bold;">if</span> input_char <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> chars:
        <span style="color: #ff7700;font-weight:bold;">print</span> input_char
        <span style="color: #ff7700;font-weight:bold;">continue</span>
    input_data = chars<span style="color: black;">&#91;</span>input_char<span style="color: black;">&#93;</span>
    diff_list = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> char, data <span style="color: #ff7700;font-weight:bold;">in</span> chars.<span style="color: black;">iteritems</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> char == input_char:
            <span style="color: #ff7700;font-weight:bold;">continue</span>
        diff_list.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>diff_of_data<span style="color: black;">&#40;</span>data, input_data<span style="color: black;">&#41;</span>, char<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    diff_list.<span style="color: black;">sort</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> input_char,
    <span style="color: #ff7700;font-weight:bold;">for</span> diff, char <span style="color: #ff7700;font-weight:bold;">in</span> diff_list<span style="color: black;">&#91;</span>:<span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> u<span style="color: #483d8b;">'({0}, {1})'</span>.<span style="color: black;">format</span><span style="color: black;">&#40;</span>diff, char<span style="color: black;">&#41;</span>.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf8'</span><span style="color: black;">&#41;</span>.<span style="color: black;">ljust</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">11</span><span style="color: black;">&#41;</span>,
    <span style="color: #ff7700;font-weight:bold;">print</span></pre></td></tr></table></div>

<p>发现效果还有待提高，并且每次测试一个新 ID 都要做一次预处理，每次预处理大概需要6s左右。</p>
<h3>目前代码</h3>
<p>对上面的代码做了一些修改，包括对文字图像做一些处理，以使其查找出的相似文字能更接近人的感觉，并且让一次预处理可以做多次比对，得到了下面代码：</p>

<div class="wp_codebox"><table><tr id="p116918"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
</pre></td><td class="code" id="p1169code18"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #808080; font-style: italic;"># - * - coding: UTF-8 - * -</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> Image, ImageDraw, ImageFont, ImageFilter
&nbsp;
font = ImageFont.<span style="color: black;">truetype</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'simsun.ttc'</span>, <span style="color: #ff4500;">24</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> get_char_data<span style="color: black;">&#40;</span>char<span style="color: black;">&#41;</span>:
    image = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'L'</span>, <span style="color: black;">&#91;</span><span style="color: #ff4500;">28</span>, <span style="color: #ff4500;">28</span><span style="color: black;">&#93;</span>, <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span>
    draw = ImageDraw.<span style="color: black;">Draw</span><span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
    draw.<span style="color: black;">text</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>, char, font=font<span style="color: black;">&#41;</span>
    image = image.<span style="color: black;">resize</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">14</span>, <span style="color: #ff4500;">14</span><span style="color: black;">&#41;</span>, Image.<span style="color: black;">ANTIALIAS</span><span style="color: black;">&#41;</span>
    <span style="color: #808080; font-style: italic;"># XXX 期待更好的处理方式</span>
    image = image.<span style="color: #008000;">filter</span><span style="color: black;">&#40;</span>ImageFilter.<span style="color: black;">SHARPEN</span><span style="color: black;">&#41;</span>.<span style="color: #008000;">filter</span><span style="color: black;">&#40;</span>ImageFilter.<span style="color: black;">SMOOTH</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">list</span><span style="color: black;">&#40;</span>image.<span style="color: black;">getdata</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> diff_of_data<span style="color: black;">&#40;</span>data1, data2<span style="color: black;">&#41;</span>:
    ret = <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">zip</span><span style="color: black;">&#40;</span>data1, data2<span style="color: black;">&#41;</span>:
        ret += <span style="color: #008000;">abs</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> - i<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> ret
&nbsp;
chars = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>0xB0, 0xF8<span style="color: black;">&#41;</span>:
    chr_i = <span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> j <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>0xA1, 0xFF<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> i == 0xD7 <span style="color: #ff7700;font-weight:bold;">and</span> j <span style="color: #66cc66;">&gt;</span>= 0xFA <span style="color: #ff7700;font-weight:bold;">and</span> j <span style="color: #66cc66;">&lt;</span>= 0xFE:
            <span style="color: #ff7700;font-weight:bold;">continue</span>
        char = <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>chr_i + <span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>j<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'gb18030'</span><span style="color: black;">&#41;</span>
        chars<span style="color: black;">&#91;</span>char<span style="color: black;">&#93;</span> = get_char_data<span style="color: black;">&#40;</span>char<span style="color: black;">&#41;</span>
&nbsp;
remember_number = <span style="color: #ff4500;">5</span>
<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:
    input_string = <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span><span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'ID: '</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'utf8'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> input_string:
        <span style="color: #ff7700;font-weight:bold;">break</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> input_char <span style="color: #ff7700;font-weight:bold;">in</span> input_string:
        <span style="color: #ff7700;font-weight:bold;">if</span> input_char <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> chars:
            <span style="color: #ff7700;font-weight:bold;">print</span> input_char
            <span style="color: #ff7700;font-weight:bold;">continue</span>
        input_data = chars<span style="color: black;">&#91;</span>input_char<span style="color: black;">&#93;</span>
        diff_list = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> char, data <span style="color: #ff7700;font-weight:bold;">in</span> chars.<span style="color: black;">iteritems</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
            <span style="color: #ff7700;font-weight:bold;">if</span> char == input_char:
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            diff_list.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>diff_of_data<span style="color: black;">&#40;</span>data, input_data<span style="color: black;">&#41;</span>, char<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        diff_list.<span style="color: black;">sort</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> input_char,
        <span style="color: #ff7700;font-weight:bold;">for</span> diff, char <span style="color: #ff7700;font-weight:bold;">in</span> diff_list<span style="color: black;">&#91;</span>:<span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span>:
            <span style="color: #ff7700;font-weight:bold;">print</span> u<span style="color: #483d8b;">'({0}, {1})'</span>.<span style="color: black;">format</span><span style="color: black;">&#40;</span>diff, char<span style="color: black;">&#41;</span>.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf8'</span><span style="color: black;">&#41;</span>.<span style="color: black;">ljust</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">11</span><span style="color: black;">&#41;</span>,
        <span style="color: #ff7700;font-weight:bold;">print</span>
    <span style="color: #ff7700;font-weight:bold;">print</span></pre></td></tr></table></div>

<h3>继续改进</h3>
<p>目前这个程序测试的效果还行，不过还有待进一步改进。可改进的地方包括上面标出 XXX 的部分，即对文字图像进行处理的部分，或许可以有更好的处理方式。除此之外，如果能直接绘制出 12px 的字，必然也会有更好的效果。如果增大字库，从 GB2312 增加到 GB18030 的字库，可以用来对比的文字也会更多，也就更可能找到相似的字了~</p>
<p>这个，还有继续改进的余地嗯~有时间就继续努力咯……</p>
<h3>参考资料</h3>
<ul>
<li><a href="http://www.matrix67.com/blog/archives/2907">用Mathematica寻找最相似的汉字 &#8211; Matrix67</a></li>
<li><a href="http://www.pythonware.com/library/pil/handbook/image.htm">The Image Module &#8211; Python Imaging Library Handbook</a></li>
<li><a href="http://www.pythonware.com/library/pil/handbook/imagefont.htm">The ImageFont Module &#8211; Python Imaging Library Handbook</a></li>
<li><a href="http://www.pythonware.com/library/pil/handbook/imagedraw.htm">The ImageDraw Module &#8211; Python Imaging Library Handbook</a></li>
<li><a href="http://www.pythonware.com/library/pil/handbook/imagefilter.htm">The ImageFilter Module &#8211; Python Imaging Library Handbook</a></li>
<li><a href="http://zh.wikipedia.org/zh-cn/GB_2312">GB 2312 &#8211; 维基百科</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/finding-higher-imitation-of-id/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>百度贴吧的世界杯竞猜</title>
		<link>http://blog.upsuper.org/guess-world-cup-in-baidu-tieba/</link>
		<comments>http://blog.upsuper.org/guess-world-cup-in-baidu-tieba/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 08:12:24 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[小程序]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Greasemonkey]]></category>
		<category><![CDATA[世界杯]]></category>
		<category><![CDATA[百度]]></category>
		<category><![CDATA[贴吧]]></category>
		<category><![CDATA[赌博]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=1160</guid>
		<description><![CDATA[貌似很久没发文章了，无聊冒出来发一个…… 这次发的东西是很无聊的，大家知道最近世界杯在踢。不过呢，作为一个对体育几乎毫不关心的人，这事基本上也跟我没什么关系……不过我要说的呢，是关于世界杯竞猜的“赌博”游戏，貌似不止百度再做，还有网易、校内什么的都在搞。不过鉴于百度这个，比较经常上，我就也来参加了~ 当然，发在这里的东西总归要有一些技术性……这次也不例外的…… 我看到网易的竞猜不仅有各种形式，而且最重要的是有赔率！而百度只显示投注金额，显然不够专业，于是我就拿 Greasemonkey 插件，可以在百度投注金额的下面显示当前赔率~就像下面这样： 安装了 Firefox 的 Greasemonkey 插件的，可以点击这里安装这个脚本：tieba_guess.user.js 哦，有人大概会注意到我在前面那张图里面下注给了韩国。倒不是我多喜欢棒子，只是因为我几乎完全不懂足球，所以就根据赔率压冷门……话说压冷门有的时候其实很划算的，比如昨晚我压瑞士，赔率40！赚翻了~强大吧~]]></description>
			<content:encoded><![CDATA[<p>貌似很久没发文章了，无聊冒出来发一个……</p>
<p>这次发的东西是很无聊的，大家知道最近世界杯在踢。不过呢，作为一个对体育几乎毫不关心的人，这事基本上也跟我没什么关系……不过我要说的呢，是关于世界杯竞猜的“赌博”游戏，貌似不止百度再做，还有网易、校内什么的都在搞。不过鉴于百度这个，比较经常上，我就也来参加了~</p>
<p>当然，发在这里的东西总归要有一些技术性……这次也不例外的……</p>
<p>我看到网易的竞猜不仅有各种形式，而且最重要的是有赔率！而百度只显示投注金额，显然不够专业，于是我就拿 Greasemonkey 插件，可以在百度投注金额的下面显示当前赔率~就像下面这样：<br />
<a href="http://blog.upsuper.org/wp-content/uploads/2010/06/世界杯竞猜_i贴吧_1276762014642.png"><img src="http://blog.upsuper.org/wp-content/uploads/2010/06/世界杯竞猜_i贴吧_1276762014642.png" alt="" title="世界杯竞猜_i贴吧_1276762014642" width="705" height="132" class="alignnone size-full wp-image-1161" /></a></p>
<p>安装了 Firefox 的 Greasemonkey 插件的，可以点击这里安装这个脚本：<a href="http://down.upsuper.org/tieba_guess.user.js">tieba_guess.user.js</a></p>
<p>哦，有人大概会注意到我在前面那张图里面下注给了韩国。倒不是我多喜欢棒子，只是因为我几乎完全不懂足球，所以就根据赔率压冷门……话说压冷门有的时候其实很划算的，比如昨晚我压瑞士，赔率40！赚翻了~强大吧~</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/guess-world-cup-in-baidu-tieba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>论论战</title>
		<link>http://blog.upsuper.org/discuss-on-war-of-words/</link>
		<comments>http://blog.upsuper.org/discuss-on-war-of-words/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 12:11:37 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[随笔写写]]></category>
		<category><![CDATA[贴吧]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=640</guid>
		<description><![CDATA[昨天在一中贴吧上和一群人展开了一次论战。其实原帖的主题是蛮无聊的，不过我们的论战升华了原帖的主题……怀念起当年在论坛和米罗、doggy、江左等人的论战。 先引 doggy 一句概括性的话：论战好啊！ 首先，论战不是辩论，至少不完全是。因为论战事实上不需要我们永远坚持自己本来的观点，有的时候会随着讨论的不断深入，发现自己的错误而改变。另一方面，看大家进行论战，与辩论相似的，常常要举出许多论据来证明自己的想法或反驳别人的想法，从这当中又能学到了不少以前不知道的东西。如辩论一样的，在论战中也要不断思考，不断找到别人论述的漏洞予以反驳，组织语言。 从此可以看出，论战不仅是一个机会，检验自己所认为的东西的可靠性，又能增长见识，学会多方面看待问题，还能增强思维。 不过，论战当中，我觉得还是有一些需要注意的，那就是，论战是不同思想之间的交锋，理论上说，就是学术上（或许有时专业性不够）的讨论，因此不因当因为想法不同而发生不该有的争执，如互相对骂或者之类的不愉快的事情。记得当时在论坛上，论战结束后，大家仍然在水区有说有笑的~ 这样的论战好啊~]]></description>
			<content:encoded><![CDATA[<p>昨天在一中贴吧上和一群人展开了<a href="http://tieba.baidu.com/f?kz=528514379" target="_blank">一次论战</a>。其实原帖的主题是蛮无聊的，不过我们的论战升华了原帖的主题……怀念起当年在论坛和米罗、doggy、江左等人的论战。</p>
<p>先引 doggy 一句概括性的话：论战好啊！</p>
<p>首先，论战不是辩论，至少不完全是。因为论战事实上不需要我们永远坚持自己本来的观点，有的时候会随着讨论的不断深入，发现自己的错误而改变。另一方面，看大家进行论战，与辩论相似的，常常要举出许多论据来证明自己的想法或反驳别人的想法，从这当中又能学到了不少以前不知道的东西。如辩论一样的，在论战中也要不断思考，不断找到别人论述的漏洞予以反驳，组织语言。</p>
<p>从此可以看出，论战不仅是一个机会，检验自己所认为的东西的可靠性，又能增长见识，学会多方面看待问题，还能增强思维。</p>
<p>不过，论战当中，我觉得还是有一些需要注意的，那就是，论战是不同思想之间的交锋，理论上说，就是学术上（或许有时专业性不够）的讨论，因此不因当因为想法不同而发生不该有的争执，如互相对骂或者之类的不愉快的事情。记得当时在论坛上，论战结束后，大家仍然在水区有说有笑的~</p>
<p>这样的论战好啊~</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/discuss-on-war-of-words/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>附中吧强帖欣赏——今年附中将杀出重围，位列全省第一！</title>
		<link>http://blog.upsuper.org/fuzhongba-powerful-post-this-year-fuzhong-will-get-the-first-rank-of-fujian-province/</link>
		<comments>http://blog.upsuper.org/fuzhongba-powerful-post-this-year-fuzhong-will-get-the-first-rank-of-fujian-province/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 08:11:02 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[嘻嘻哈哈]]></category>
		<category><![CDATA[学校]]></category>
		<category><![CDATA[笑话]]></category>
		<category><![CDATA[贴吧]]></category>
		<category><![CDATA[高考]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=116</guid>
		<description><![CDATA[实在太强大的贴了，这里贴出来一起欣赏一下。这里收录一些比较经典的回帖，将随着原帖更新而更新。 各同学留名贴仅选部分代表性的贴。 原帖地址：http://tieba.baidu.com/f?kz=405490203 1 据说今年一中萎了,我们学校有望第一.状元也在我们当中产生.有同学理综能上280,英语也有135.估计我们平均分比一中要高出许多!校长请客! 2 三中的路过,楼主请客 6 据说&#8230;有望&#8230;有同学&#8230;估计&#8230;高出许多! 中心:校长请客! 9 考得好校长的功劳,考得差学生的素质差…翁总的不灭定律 14 &#8230;楼主很有理想 15 楼主还是洗洗睡吧,做梦会比较快… 20 YY至十几天以后 23 置顶?附中要红了… 27 置顶?.. 我们站在风口浪尖 36 强贴留名,三中观光团路过 37 呃…同留,福一旅行社路过… 40 大梦留形,臭屁留声&#8230; 用脚趾想都知道是做梦. 英语那点分也炫耀? 一中天才多了去了&#8230; 天上好多牛喔! 41 有种把这贴顶三个月让大家都看到… 44 一中吧主参观完毕&#8212;xj3831.一大早就不得不慕名而来 45 一中论坛管理员到此一游 热烈庆祝附中勇夺全省第一…谢谢 48 不要怕嘛,附中还是很有可能考第一的嘛,只要一中三中厦一双十莆一都萎掉就可以了,也不难嘛～ 53 自信是好事.但要等有一定实力了再说吧~~附中还是有潜力成为全省第一的,就看接下来的几届学生怎么看怎么想怎么做了, 我看好附中哦,加油!! 54 咳，路漫漫其修远兮，吾将上下而求索 55 以前几乎不来附中吧,这次慕名前来,果然是至强一帖,再下佩服佩服. 一中某学子路过&#8230; 66 刚刚英语考暴废…来这里逛逛轻松一下～ 67 几天不来还置顶了…还好抢了沙发…广告位招租 68 [...]]]></description>
			<content:encoded><![CDATA[<p>实在太强大的贴了，这里贴出来一起欣赏一下。这里收录一些比较经典的回帖，将随着原帖更新而更新。</p>
<p>各同学留名贴仅选部分代表性的贴。</p>
<p>原帖地址：<a href="http://tieba.baidu.com/f?kz=405490203" target="_blank">http://tieba.baidu.com/f?kz=405490203</a></p>
<p><span id="more-116"></span></p>
<table width="90%" style="background-color: white; color: black; padding: 5px 0.5em 5px 1em; text-indent: -0.75em;" cellspacing="5px">
<tr>
<td><strong>1</strong> 据说今年一中萎了,我们学校有望第一.状元也在我们当中产生.有同学理综能上280,英语也有135.估计我们平均分比一中要高出许多!校长请客!</td>
</tr>
<tr>
<td><strong>2</strong> 三中的路过,楼主请客</td>
</tr>
<tr>
<td><strong>6</strong> 据说&#8230;有望&#8230;有同学&#8230;估计&#8230;高出许多!<br />
中心:校长请客!</td>
</tr>
<tr>
<td><strong>9</strong> 考得好校长的功劳,考得差学生的素质差…翁总的不灭定律</td>
</tr>
<tr>
<td><strong>14</strong> &#8230;楼主很有理想</td>
</tr>
<tr>
<td><strong>15</strong> 楼主还是洗洗睡吧,做梦会比较快…</td>
</tr>
<tr>
<td><strong>20</strong> YY至十几天以后</td>
</tr>
<tr>
<td><strong>23</strong> 置顶?附中要红了…</td>
</tr>
<tr>
<td><strong>27</strong> 置顶?.. 我们站在风口浪尖</td>
</tr>
<tr>
<td><strong>36</strong> 强贴留名,三中观光团路过</td>
</tr>
<tr>
<td><strong>37</strong> 呃…同留,福一旅行社路过…</td>
</tr>
<tr>
<td><strong>40</strong> 大梦留形,臭屁留声&#8230;   用脚趾想都知道是做梦. 英语那点分也炫耀? 一中天才多了去了&#8230;     天上好多牛喔!</td>
</tr>
<tr>
<td><strong>41</strong> 有种把这贴顶三个月让大家都看到…</td>
</tr>
<tr>
<td><strong>44</strong> 一中吧主参观完毕&#8212;xj3831.一大早就不得不慕名而来</td>
</tr>
<tr>
<td><strong>45</strong> 一中论坛管理员到此一游 热烈庆祝附中勇夺全省第一…谢谢</td>
</tr>
<tr>
<td><strong>48</strong> 不要怕嘛,附中还是很有可能考第一的嘛,只要一中三中厦一双十莆一都萎掉就可以了,也不难嘛～</td>
</tr>
<tr>
<td><strong>53</strong> 自信是好事.但要等有一定实力了再说吧~~附中还是有潜力成为全省第一的,就看接下来的几届学生怎么看怎么想怎么做了, 我看好附中哦,加油!!</td>
</tr>
<tr>
<td><strong>54</strong> 咳，路漫漫其修远兮，吾将上下而求索</td>
</tr>
<tr>
<td><strong>55</strong> 以前几乎不来附中吧,这次慕名前来,果然是至强一帖,再下佩服佩服. 一中某学子路过&#8230;</td>
</tr>
<tr>
<td><strong>66</strong> 刚刚英语考暴废…来这里逛逛轻松一下～</td>
</tr>
<tr>
<td><strong>67</strong> 几天不来还置顶了…还好抢了沙发…广告位招租</td>
</tr>
<tr>
<td><strong>68</strong> 这个…点点点…还置顶啦～好吧,那么…勇气可嘉…我也慕名而来…</td>
</tr>
<tr>
<td><strong>69</strong> 一中某神飘过~~ 小孩啊,积点口德~~ 昨晚刚吃过猪脑 味道不错</td>
</tr>
<tr>
<td><strong>70</strong> 懂幽默的人太少了……</td>
</tr>
<tr>
<td><strong>82</strong> 一中生活多么枯燥,难得附中吧有如此精彩强大的贴,怎能不吸引一中学子慕名而来?</td>
</tr>
<tr>
<td><strong>83</strong> 此贴为附中镇吧神贴,膜拜一下</td>
</tr>
<tr>
<td><strong>84</strong>  一中小生到此,原来这儿也这么热闹.</td>
</tr>
<tr>
<td><strong>90</strong> 哟 一中高2文科子弟慕名游学至此 表示恭喜 </td>
</tr>
<tr>
<td><strong>91</strong> 三中观光团路过,坐20路来一次不容易啊</td>
</tr>
<tr>
<td><strong>92</strong> 竟然是我们三中人坐到了全省第一的沙发,鸡冻啊!</td>
</tr>
<tr>
<td><strong>93</strong> 一中小废柴路过!一中人快满40人开团来下全省第一的副本吧!会爆好东西!</td>
</tr>
<tr>
<td><strong>94</strong> 啦&#8230;我们格致比不上你们,但是还是来祝福下附中!</td>
</tr>
<tr>
<td><strong>97</strong> 一三已到,厦门的还不来朝觐福建至尊?</td>
</tr>
<tr>
<td><strong>98</strong> lz,你能让时光回到1980年，附中超过一中就能成为现实了</td>
</tr>
<tr>
<td><strong>102</strong> 八中的高一小弟慕名而来,恭喜了!</td>
</tr>
<tr>
<td><strong>103</strong> 厦门一中应福州一中邀请组团前来参观..路远慢了些</td>
</tr>
<tr>
<td><strong>105</strong> 福州一中步行而来~上街偏僻了点,比较慢…还是为附中庆祝!by殇</td>
</tr>
<tr>
<td><strong>106</strong> 恭喜,据说这次一中勇夺倒一桂冠</td>
</tr>
<tr>
<td><strong>108</strong> 四中小P孩前来膜拜,让我们沾沾全省第一的仙气.</td>
</tr>
<tr>
<td><strong>113</strong> 此帖虽狂，却可以让大家更加密切地关注附中的成绩。期待着附中的好成绩，也期待着附中高考成绩的透明度。无论如何，都要向为高考付出努力老师们致敬。</td>
</tr>
<tr>
<td><strong>114</strong> 其他学校建议来我们这看此贴的贴都快加精了&#8230;.有志气..很好很好</td>
</tr>
<tr>
<td><strong>117</strong> 一中旅游团第N号营员来留名了..这么经典的帖子怎么能不来呢?</td>
</tr>
<tr>
<td><strong>118</strong> 瘦死的骆驼比马大,楼猪听说过么?以前一中人对附中印象还不错,现在啊,楼猪一颗老鼠屎坏了一锅粥啊!我建议该帖申请世界吉尼斯记录最强笑话!</td>
</tr>
<tr>
<td><strong>120</strong> 三中学子慕名发来贺电</td>
</tr>
<tr>
<td><strong>123</strong> 一中一小生慕名前来,果真腹痛而归…哈哈哈哈哈</td>
</tr>
<tr>
<td><strong>125</strong> 二中学生不才,睡觉前来模拜</td>
</tr>
<tr>
<td><strong>128</strong> 祝楼主美梦成真! By 一中小弟</td>
</tr>
<tr>
<td><strong>130</strong> ORZ&#8230;本人一中学生&#8230;来附中复读一年&#8230;感觉附中同学都挺谦虚的&#8230;（复读班认识的几个）。。。后生可畏 那我就只能祝你梦想成真了</td>
</tr>
<tr>
<td><strong>131</strong> 附中人才太多,今年全省第一,明年肯定全国第一</td>
</tr>
<tr>
<td><strong>134</strong> 三中的慕名而来,幸好它还在顶上,没有错过.恭祝今天附中全省第一.by:烬儿~.</td>
</tr>
<tr>
<td><strong>135</strong> 很好很好.3中酱油团组团成功.</td>
</tr>
<tr>
<td><strong>136</strong> 三中酱油党预备党员路过</td>
</tr>
<tr>
<td><strong>137</strong> 厦门莆田的怎么还没来拜?</td>
</tr>
<tr>
<td><strong>138</strong> 厦门双十中学考察团到此一游</td>
</tr>
<tr>
<td><strong>139</strong> 早知道就不把一万8给一中了,可好像当时附中不收钱…</td>
</tr>
<tr>
<td><strong>141</strong> 福州一中学生会学习部慕名到此一游,部长谨代表本部门祝贺附中取得优异成绩!</td>
</tr>
<tr>
<td><strong>142</strong> 此帖加强了各校间往来,很好很强大</td>
</tr>
<tr>
<td><strong>145</strong> 这么强大的贴怎么能不置顶了呢?这不符合礼啊!</td>
</tr>
<tr>
<td><strong>146</strong> 一中心理部部员仅代表一中心理部到此一游</td>
</tr>
<tr>
<td><strong>147</strong> 这种贴怎么那么火&#8230;</td>
</tr>
<tr>
<td><strong>148-157</strong> 你不置顶了我们也要人工置顶,我们要认真学习附中精神!</td>
</tr>
<tr>
<td><strong>158</strong> 附中向来都蛮低调的…这回总算发标了!看来不在沉默中爆发,就在沉默中灭亡…!～一中不才飘过</td>
</tr>
<tr>
<td><strong>159</strong> 人工置顶,日日参拜!</td>
</tr>
<tr>
<td><strong>162</strong> 果然镇吧宝帖…</td>
</tr>
<tr>
<td><strong>163</strong> 火星人飘过 望步行数光年回来时能见到楼主崛起</td>
</tr>
<tr>
<td><strong>164</strong> 伊利集团恭贺附中高考勇夺第一</td>
</tr>
<tr>
<td><strong>165</strong> 埃塞俄比亚驻华大使馆恭贺附中夺魁!</td>
</tr>
<tr>
<td><strong>166</strong> 乌拉圭驻华大使馆恭贺附中夺魁</td>
</tr>
<tr>
<td><strong>167</strong> 法国家乐福集团发来贺电</td>
</tr>
<tr>
<td><strong>168</strong> 阿尔巴尼亚驻华大使馆恭贺附中夺魁!</td>
</tr>
<tr>
<td><strong>169</strong> 全球华人 港澳台胞共同庆贺附中伟大胜利</td>
</tr>
<tr>
<td><strong>170</strong> 本拉登于巴基斯坦某山洞发来贺电！</td>
</tr>
<tr>
<td><strong>175</strong> 有慧根呵呵呵1中不才学子</td>
</tr>
<tr>
<td><strong>176</strong> 附中考这样好,去玩玩去把…1</td>
</tr>
<tr>
<td><strong>178</strong> 巫妖王Arthas率天灾众由诺森德前来参拜</td>
</tr>
<tr>
<td><strong>179</strong> 张小凡带陆雪琪到此一游</td>
</tr>
<tr>
<td><strong>181</strong> Storm Earth And Fire,Head My Call~~</td>
</tr>
<tr>
<td><strong>182</strong> 三中门口保安来霸主这里瞻仰</td>
</tr>
<tr>
<td><strong>183</strong> 这小娃有灵气&#8230;</td>
</tr>
<tr>
<td><strong>184</strong> 四十中门口小卖铺好板娘来瞅瞅聪明娃～</td>
</tr>
<tr>
<td><strong>189</strong> 呀呀呀        掉下来一格…               强帖没摔痛吧?</td>
</tr>
<tr>
<td><strong>190</strong> 赵灵儿灵魂慕名飘过……</td>
</tr>
<tr>
<td><strong>192</strong> 附中神校,仙福永享.千秋万代,老考第一.</td>
</tr>
<tr>
<td><strong>194</strong> 部里决定给您颁发奖章 请保存好身份证、准考证</td>
</tr>
<tr>
<td><strong>196</strong> 看到此贴只觉此贴只应天上有,人间难得几回看啊～牛,实在是牛.牛牛明天见,牛牛天天见</td>
</tr>
<tr>
<td><strong>199</strong> 厦门双十中学后门保安飞过</td>
</tr>
<tr>
<td><strong>201</strong> 啊哈,热烈祝贺翁教主杀灭迅哥儿勇夺福建致尊荣誉称号,希里哈啦愚勒公司附赠附中年度最佳搞笑新闻奖.</td>
</tr>
<tr>
<td><strong>202</strong> 牛! 我们正在努力向你们学校看齐 希望早日来一中授课</td>
</tr>
<tr>
<td><strong>206</strong> 膜拜,附中大哥受一中小弟一拜</td>
</tr>
<tr>
<td><strong>210</strong> 一中小生因备战会考来迟一步 望附中老大恕罪</td>
</tr>
<tr>
<td><strong>212</strong> 高二的看好了啊 要向附中的高3们学习 争取下次拿第一啊</td>
</tr>
<tr>
<td><strong>215</strong> 愿艾露恩与您同在</td>
</tr>
<tr>
<td><strong>220</strong> 神,神!有灵气,有灵气~~</td>
</tr>
<tr>
<td><strong>224</strong> 啊!!!我要转学!据说我们一中今年新校区考砸了.没想到第一被附中抢了啊?</td>
</tr>
<tr>
<td><strong>230</strong> 牛!顶起! 明日政治会考,我们一中学子一定要以附中思想来武装自己的头脑! 深刻理解“YY决定第一”的附中价值规律,紧抓“多出状元帖”的帖吧组织建设,发挥好“镇吧宝帖”在附中文化战略中的先锋作用,把握“管他三七二十一,想来就是考第一”的附中哲学活的灵魂,坚持走附中特色的高考霸主道路!!!</td>
</tr>
<tr>
<td><strong>231</strong> 顶到2012年奥运会</td>
</tr>
<tr>
<td><strong>237</strong> 今天我看到一个长得很像希特勒的人 他问我师大附中贴吧怎么走 我把手机给他，他就感动地热泪盈眶了</td>
</tr>
<tr>
<td><strong>238</strong> 加油~~~置顶!!!! 原来逍遥一家来这儿郊游啦&#8230;..</td>
</tr>
<tr>
<td><strong>240</strong> 时时惦念此贴</td>
</tr>
<tr>
<td><strong>242</strong> 熬夜顶起震吧帖,就像董存瑞顶起炸药包.</td>
</tr>
<tr>
<td><strong>245</strong> 吐血～我们把这吧顶到了wap点击率218名…是否给个最佳贡献奖?</td>
</tr>
<tr>
<td><strong>246</strong> 卡萨诺率领领众萨诺弟子前来膜拜,愿附中千秋万代勇夺第一</td>
</tr>
<tr>
<td><strong>247</strong> 请大家冷静看此贴…一中的也不要无畏去顶此贴…像是个圈套故意让我们怒,之后他们就有理由讲肚量小.素质低了!反正最后结果都要出来的!到那时再见分晓!终止愚昧的顶贴行为吧!</td>
</tr>
<tr>
<td><strong>249</strong> 今年说不定八中会成为最大黑马&#8230;据说他们老师猜中了好几题,考生出来时个个笑眯眯的&#8230;</td>
</tr>
<tr>
<td><strong>251</strong> 理想是远大的，道路是曲折的。。。。LZ加油，本届不行，还有下下下。。届么，只是，那时的LZ不知道眉毛胡子几许了啊，呵呵呵&#8212;&#8211;一中家长飘过～</td>
</tr>
<tr>
<td><strong>256</strong> 是此顿位贴引发了汶汶大地震吗～</td>
</tr>
<tr>
<td><strong>257-258</strong> 拳皇吧八神庵路过模拜此贴,表示对此贴甘拜下风,并决定以此贴为榜样,好好学习他的精神!</td>
</tr>
<tr>
<td><strong>259</strong> 回247楼:我们看此贴并无一丝愤怒,而是十分开心,为我们枯燥的学习生活带来了许多精彩!</td>
</tr>
<tr>
<td><strong>262</strong> 少伟:附中贴吧的镇吧神贴在腊一块啊?刑傻:好贱!你混账!这么有名的贴!(大家顶贴要溃一些,情绪要薄满一些…)</td>
</tr>
<tr>
<td><strong>264</strong> 我代迅哥向翁总发来贺电</td>
</tr>
<tr>
<td><strong>265</strong> 我代表三中小黄向翁总发来贺电</td>
</tr>
<tr>
<td><strong>266</strong> 早晚顶强帖,有益身心健康!睡前顶一顶,喔~飞一般的感觉!</td>
</tr>
<tr>
<td><strong>268</strong> 召集人手中,争取为建设社会主义和谐社会做新的贡献!</td>
</tr>
<tr>
<td><strong>271</strong> 阿哈!新的一天新的开始哈!强帖挺住,刚看你掉了两格.加油!起床再来顶哦!</td>
</tr>
<tr>
<td><strong>272</strong> 睡前顶强贴</td>
</tr>
<tr>
<td><strong>274</strong> 凌晨也别摔了…</td>
</tr>
<tr>
<td><strong>275</strong> 念完政治来顶</td>
</tr>
<tr>
<td><strong>276</strong> 才睡了一觉怎么就掉了这么多?摔疼了吧,给你顶上</td>
</tr>
<tr>
<td><strong>287</strong> 下午考完政治把这贴收进我博客～</td>
</tr>
<tr>
<td><strong>289</strong> 我爱政治,政治爱我</td>
</tr>
<tr>
<td><strong>295</strong> 出门前顶一顶,会考前一沾灵气.</td>
</tr>
<tr>
<td><strong>298</strong> 会考前一拜,精神更愉快</td>
</tr>
<tr>
<td><strong>299</strong> 福建省会考办恭祝附中取得好成绩～下午会考希望各位同学取得好成绩!</td>
</tr>
<tr>
<td><strong>301</strong> 考前拜一拜.会考轻松过</td>
</tr>
<tr>
<td><strong>302</strong> 哈哈 全球都在关注啊 楼主话虽不多 但字字经典 这帖得吸引力是全省第一倒是真的</td>
</tr>
<tr>
<td><strong>308</strong> 考完政治就来顶贴！</td>
</tr>
<tr>
<td><strong>311</strong> 由于我全面贯彻了附中精神,这次政治会考以其精神作为理论基础,以其先进事迹作为理论依据.答题快准恨!</td>
</tr>
<tr>
<td><strong>313</strong> 自从用了附中精神腰不酸腿不痛了,一个精神顶过去五个,一口气上宿舍楼不费劲～</td>
</tr>
<tr>
<td><strong>315</strong> 会考後的事实证明此帖神有灵气!</td>
</tr>
<tr>
<td><strong>317</strong> 我爱这贴。 ——一中人的心声</td>
</tr>
<tr>
<td><strong>318</strong> 果然 昨晚来过之后今天考试一帆风顺</td>
</tr>
<tr>
<td><strong>320</strong> 昨天膜拜完此神帖…今天考试10分钟内完成…</td>
</tr>
<tr>
<td></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/fuzhongba-powerful-post-this-year-fuzhong-will-get-the-first-rank-of-fujian-province/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

