【发布时间】:2014-01-11 05:51:32
【问题描述】:
我正在寻找可以正确匹配有效拼音的正则表达式(例如“sheng”、“sou”(同时忽略无效的拼音,例如“shong”、“sei”)。顶部提供的大多数正则表达式在某些情况下,Google 结果匹配无效的拼音。
显然,无论采取什么方法,这将是一个怪物正则表达式,我对解决这个问题可以采取的不同方法特别感兴趣。例如,“Optimizing a regular expression to parse chinese pinyin”使用回溯。
可在此处找到有效拼音表: http://pinyin.info/rules/initials_finals.html
【问题讨论】:
-
你说“sou”既有效又无效。
-
不错的收获。 “Sou”有效,所以我把第二个改成“sei”,拼音无效。
-
好问题。对于实际应用,查找表比正则表达式有几个优点。
-
一个真正懒惰的蛮力解决方案是采用column 6 "Hanyu Pinyin" (or another column depending on your needs) from here,然后将每个元音替换为其自身及其音调重音(例如
a→[aāáǎà])。这将包括一些误报(例如,yào有效,但yaò无效)。然后用|分隔音节,瞧! -
对于重音拼音,粗略和模糊的方法是使用
.*[ĀāÁáǍǎÀàĒēÉéĚěÈèĪīÍíǏǐÌìŌōÓóǑǒÒòŪūÚúǓǔÙùÜüǗǘǙǚǛǜ«»⸢⸣⸤⸥]+.*——当然,这也可以匹配任何非英语字符集,例如德语、法语、匈牙利语等。正确的方法是在应用 stevendaniels' 答案之前,使用字符构建替换地图以预处理数据。