免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tikico
打印 上一主题 下一主题

大侠请进:如何在英文和中文之间加入分隔符 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-03-03 13:57 |只看该作者
汉单拼音不是ascii码,它是unicode.因此使用unicode来匹配即可.

论坛徽章:
0
12 [报告]
发表于 2006-03-06 13:57 |只看该作者
原帖由 limodou 于 2006-3-3 13:57 发表
汉单拼音不是ascii码,它是unicode.因此使用unicode来匹配即可.

问题还是没有很好的解决,现在想对所有的汉语拼音加上标签,如:
  1. 【砥柱中流】 Dǐzhù zhōnɡliú  中流砥柱
复制代码

变成:
  1. 【砥柱中流】<p> Dǐzhù zhōnɡliú </p> 中流砥柱
复制代码

麻烦哪位大侠能给出代码,不胜感激!

论坛徽章:
0
13 [报告]
发表于 2006-03-06 14:00 |只看该作者
你自己的是如何尝试解决这个问题的?讨论问题,不能只要求别人想办法啊,也说说你的思路。

论坛徽章:
0
14 [报告]
发表于 2006-03-06 16:34 |只看该作者
原帖由 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>'。位置查找如例:

  1. >>>s='【牴牾】 dǐwǔ 抵牾 contradiction;; conflict'
  2. >>>m='d'
  3. >>>s.find(m,0,len(s))
  4. 9
复制代码

关键难点在如何在9这个位置插入<p>这个标签?如何判断首位位置?然后就是速度可能有点问题。
还请大家指教!

论坛徽章:
0
15 [报告]
发表于 2006-03-06 17:02 |只看该作者
我以前描述的处理方式是在一个扫描过程中进行分类与处理。比如:

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

论坛徽章:
0
16 [报告]
发表于 2006-03-06 17:44 |只看该作者
原帖由 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我也试过,就是不知道如何给拼音打上标签,还请指教,谢谢!

论坛徽章:
0
17 [报告]
发表于 2006-03-06 20:26 |只看该作者
judge_flag是一个函数,它可以返回一个标志啊。不过我也说了,这只是一个示例,完成你的任务还有一些东西要补充完整才行。象汉语拼音的判断,可以:

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

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

论坛徽章:
0
18 [报告]
发表于 2006-03-07 10:45 |只看该作者
原帖由 limodou 于 2006-3-6 20:26 发表
judge_flag是一个函数,它可以返回一个标志啊。不过我也说了,这只是一个示例,完成你的任务还有一些东西要补充完整才行。象汉语拼音的判断,可以:

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

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

论坛徽章:
0
19 [报告]
发表于 2006-03-07 11:47 |只看该作者
使用str可能不行。建议使用unicode。因此我上面的代码是把空格算为拼音的一部分了。

论坛徽章:
0
20 [报告]
发表于 2006-03-07 13:43 |只看该作者
原帖由 limodou 于 2006-3-7 11:47 发表
使用str可能不行。建议使用unicode。因此我上面的代码是把空格算为拼音的一部分了。

不理解如何使用unicode,
list_py=[u'a',u'b'......],
eachline=eachline.encode('mbcs')
还是很模糊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP