| 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) |
|
|