- 论坛徽章:
- 0
|
- #coding=gbk
- a = u'【牴牾】 dǐwǔ 抵牾 contradiction; conflict 【牴牾】 dǐwǔ 抵牾 contradiction; conflict'
- FLAG_WORD = 1
- FLAG_PINYIN = 2
- FLAG_ZH = 3
- FLAG_EN = 4
- tags = {
- FLAG_WORD:('<w>', '</w>'),
- FLAG_PINYIN:('<p>', '</p>'),
- FLAG_ZH:('<zh>', '</zh>'),
- FLAG_EN:('<en>', '</en>')
- }
- flag = -1
- i = 0
- s = [] #结果
- buf = [] #缓冲区
- pinyin = u'dǐwǔ' + ' '
- last_begin_tag = ''
- last_flag = flag
- while i<len(a):
- if a[i] == u'【': #开始处理单词
- #判断buf是否有内容,有则输出,同时注意结束tag
- if buf:
- b, e = tags[last_flag]
- buf.append(e)
- s.append(''.join(buf))
- buf = []
- flag = FLAG_WORD
- buf.append(a[i])
- i += 1
- while i < len(a) and a[i] != u'】':
- buf.append(a[i])
- i += 1
- #将】也加到缓冲区中
- buf.append(a[i])
- i += 1
- b, e = tags[flag]
- s.append(b + ''.join(buf) + e)
-
- #开始处理拼音
- flag = FLAG_PINYIN
- buf = []
- while i<a[i] and a[i] in pinyin:
- buf.append(a[i])
- i += 1
- b, e = tags[flag]
- s.append(b + ''.join(buf).strip() + e) #使用strip去掉多余的首尾空格
- last_flag = flag
- buf = []
- continue
- else:
- if ord(a[i]) < 127: #英文
- flag = FLAG_EN
- else:
- flag = FLAG_ZH
- if last_flag != flag:
- #判断是否上一个标志是否是中或英文,如果不是表示第一次进入则输出开始tag,
- #否则先输出上一个的结束tag,然后是一个开始tag
- if last_flag in (FLAG_ZH, FLAG_EN):
- b, e = tags[last_flag]
- buf.append(e)
- b, e = tags[flag]
- buf.append(b)
- buf.append(a[i])
- last_flag = flag
- else:
- buf.append(a[i])
- i += 1
- if buf:
- b, e = tags[last_flag]
- buf.append(e)
- s.append(''.join(buf))
-
- print ''.join([x.encode('gbk') for x in s])
复制代码
这里我没有从文件中读出文本,直接使用了一个unicode串来处理的。而且可以处理多个汉语词组。因此最开始可以:
text = file('a.txt').read() #这样把文本全部读出来
然后转化为unicode
a = unicode(text, 'gbk') |
|