大侠请进:如何在英文和中文之间加入分隔符

汉单拼音不是ascii码,它是unicode.因此使用unicode来匹配即可.


QUOTE:
原帖由 limodou 于 2006-3-3 13:57 发表
汉单拼音不是ascii码,它是unicode.因此使用unicode来匹配即可.

问题还是没有很好的解决,现在想对所有的汉语拼音加上标签,如:

[Copy to clipboard] [ - ]
CODE:
【砥柱中流】 Dǐzhù zhōnɡliú  中流砥柱

变成:

[Copy to clipboard] [ - ]
CODE:
【砥柱中流】<p> Dǐzhù zhōnɡliú </p> 中流砥柱

麻烦哪位大侠能给出代码,不胜感激!
你自己的是如何尝试解决这个问题的?讨论问题,不能只要求别人想办法啊,也说说你的思路。


QUOTE:
原帖由 wolfg 于 2006-3-6 14:00 发表
你自己的是如何尝试解决这个问题的?讨论问题,不能只要求别人想办法啊,也说说你的思路。

我的思路是:
1.利用正则表达式:写一个匹配所有汉语拼音的re,我找出其对应的字符如下:
252             A3E0        ` a b c d e f g h i j k l m n o
268             A3F0        p q r s t u v w x y z { | }
658             A8A0           ā á ǎ à ē é ě è ī í ǐ ì ō ó ǒ
674             A8B0        ò ū ú ǔ ù ǖ ǘ ǚ ǜ ü ê ɑ  ń ň 
将匹配的字符re.match(...).group()修改成<p>re.match(...).group()</p>
目前的困难在于 :a.这个re怎么写;b.字符串的修改,没有类似list的insert()函数,也没有replace()
2.利用字符操作:根据limodou兄的建议,将所有汉语拼音存成一个list,然后遍历查找文件,得出每行出现汉语拼音的首位置和尾位置,在首位置处插入‘<p>’,在尾位置插入'</p>'。位置查找如例:

[Copy to clipboard] [ - ]
CODE:

>>>s='【牴牾】 dǐwǔ 抵牾 contradiction;; conflict'
>>>m='d'
>>>s.find(m,0,len(s))
9

关键难点在如何在9这个位置插入<p>这个标签?如何判断首位位置?然后就是速度可能有点问题。
还请大家指教!
我以前描述的处理方式是在一个扫描过程中进行分类与处理。比如:

s = []  #最后的结果
buf = [] #缓冲区
while get_next_char():
    flag = judge_flag():
    if flag=="w":
        buf = get_w()
    elif flag == "p":
        buf = get_p()
    ...
    s.append(''.join(buf))
    buf = []

上面的示例并不全面,因为中英文是混在一起的,只有w,p可以一次性分析出来。因此对于中英文可能要记住上次的字符,然后与本次的字符进行比较,然后就可以判断出它是第一次出现,还是后续的出现,因此可以判断出是否结束和开始。这里面的确有许多的细节要考虑。但关键是它只扫描字符串一次。而不是重复扫描,因此效率还可以。


QUOTE:
原帖由 limodou 于 2006-3-6 17:02 发表
我以前描述的处理方式是在一个扫描过程中进行分类与处理。比如:

s = []  #最后的结果
buf = [] #缓冲区
while get_next_char():
    flag = judge_flag():
    if flag=="w":
        buf = g ...

limodou兄,上面的东东有点不明白,"w"是后面加进去的,judge_flag()怎么判断?
而且问题的关键似乎是细节,unicode我也试过,就是不知道如何给拼音打上标签,还请指教,谢谢!
judge_flag是一个函数,它可以返回一个标志啊。不过我也说了,这只是一个示例,完成你的任务还有一些东西要补充完整才行。象汉语拼音的判断,可以:

i = pos
buf = []
while text[i] in pinyin + ' ':
    buf.append(text[i])
    i += 1

pinyin为汉语拼音,而加上空格的目的是为了可以处理拼音中间的空格。


QUOTE:
原帖由 limodou 于 2006-3-6 20:26 发表
judge_flag是一个函数,它可以返回一个标志啊。不过我也说了,这只是一个示例,完成你的任务还有一些东西要补充完整才行。象汉语拼音的判断,可以:

i = pos
buf = []
while text in pinyin + ' ':
     ...

谢谢limodou兄一直的关注。由于比较菜,用python还是没能解决问题,又不想用awk、sed,因为想好好学习一下python。
仔细观察文本发现,汉语拼音和前后文本之间都有空格分开。如果string.split(" ")只要找到表列中的汉语拼音再进行插入标记操作就简单了,当然还要考虑拼音之间的空格。问题是,利用str()函数转化为字符串好像不行。
现在很苦恼,希望能对汉语拼音加上标记就不错了。期待详细点示例描叙。
使用str可能不行。建议使用unicode。因此我上面的代码是把空格算为拼音的一部分了。


QUOTE:
原帖由 limodou 于 2006-3-7 11:47 发表
使用str可能不行。建议使用unicode。因此我上面的代码是把空格算为拼音的一部分了。

不理解如何使用unicode,
list_py=[u'a',u'b'......],
eachline=eachline.encode('mbcs')
还是很模糊!