FALCON / panphon /collapse.py
MLSpeech's picture
Vendor patched panphon (py3.8-compatible import)
787be4d verified
Raw
History Blame Contribute Delete
1.27 kB
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import os.path
import pkg_resources
import yaml
from panphon import _panphon
from panphon import permissive
class Collapser(object):
def __init__(self, tablename='dogolpolsky_prime.yml', feature_set='spe+', feature_model='strict'):
fm = {'strict': _panphon.FeatureTable,
'permissive': permissive.PermissiveFeatureTable}
self.fm = fm[feature_model](feature_set=feature_set)
self.rules = self._load_table(tablename)
def _load_table(self, tablename):
fn = os.path.join('data', tablename)
fn = pkg_resources.resource_filename(__name__, fn)
with open(fn, 'r') as f:
rules = []
table = yaml.load(f.read(), Loader=yaml.FullLoader)
for rule in table:
rules.append((_panphon.fts(rule['def']), rule['label']))
return rules
def collapse(self, s):
segs = []
for seg in self.fm.seg_regex.findall(s):
fts = self.fm.fts(seg)
for mask, label in self.rules:
if self.fm.match(mask, fts):
segs.append(label)
break
return ''.join(segs)