有没有现成的Python拼音分词工具?
比如一段英文字符 jintiantianqibucuo 可以拆分为 jin tian tian qi bu cuo。如果不符合拼音规则则返回输入非拼音的提示
如果有现成的就最好了,省的重写一个
有没有现成的Python拼音分词工具?
我还以为是中文分词呢,刚想推荐一下 IKAnalyzer… 这个枚举不是超简单么?
我过了一遍所有 utf-8 中文字符然后用 pinyin4j 帮你枚举了一下 XD
https://gist.github.com/yuikns/387be5e9cf450ae3589fa7037c94453e#file-pinyin_tokenlizer-py
有现成的。推荐用 pypinyin 库,它能处理分词和转换。
安装:
pip install pypinyin
基本用法:
from pypinyin import lazy_pinyin, Style
# 简单转换
text = "你好世界"
result = lazy_pinyin(text)
print(result) # ['ni', 'hao', 'shi', 'jie']
# 带声调
result_tone = lazy_pinyin(text, style=Style.TONE)
print(result_tone) # ['nǐ', 'hǎo', 'shì', 'jiè']
# 处理多音字(需要分词库)
from pypinyin.contrib.tone_convert import to_normal
text2 = "银行行长"
result2 = lazy_pinyin(text2)
print(result2) # ['yin', 'hang', 'hang', 'zhang']
如果遇到多音字问题,可以搭配 jieba 分词提高准确率:
from pypinyin import lazy_pinyin, Style
import jieba
from pypinyin.contrib.tone_convert import to_normal
def pinyin_with_seg(text):
words = jieba.lcut(text)
pinyin_list = []
for word in words:
pinyin_list.extend(lazy_pinyin(word))
return pinyin_list
text = "银行行长在银行"
result = pinyin_with_seg(text)
print(result) # ['yin', 'hang', 'hang', 'zhang', 'zai', 'yin', 'hang']
pypinyin 功能挺全的,支持多种拼音风格(不带调、带数字声调、带符号声调等),还能处理轻声和儿化音。对于大多数中文转拼音的需求够用了。
总结:用 pypinyin 就行。
输入是 jintianxtianqibucuo 其中 tian[x]tian 有问题,所以输出 [‘jin’, ‘tian’, ‘invalid:x’, ‘tian’, ‘qi’, ‘bu’, ‘cuo’]。
不玩啦
谢谢老哥,我回去看下。主要就是怕自己拼音规则写的不完整
不过还有一些 badcase 还是蛮难的其实,比如 xianshi (西安市)是 xi’an’shi 还是 xian’shi ;或者 xuanzhuan (旋转)是 xuan’zhuan 还是 xu’an’zhuan ;以 声母 分隔,是硬边界,但是还有一些软边界是 韵母 分隔,简化的话。。。就是列个高频词表匹配一下,通用的话是不是还得整个 language model 什么的,没再仔细想了
对。常见问题是 xian 到底是西安还是鲜凭借没有分割的拼音乱猜也没用。
要死只是算个人 possibility 那简单,手头有几个 g 微博语料做个 ngram 很容易,不过确定性就不可知了
倒是陕西的拼音 Shaanxi,这种需要额外 knowledge 的比较烦不能一步搞定
已经很好了,shaanxi 严格来说确实不是拼音,是英文名了

