【问题标题】:Generate output based on first character of a word根据单词的第一个字符生成输出
【发布时间】:2021-07-13 12:27:01
【问题描述】:

我正在尝试使用适用于 Python 的赫尔辛基有限状态技术 (HFST) 设置有限状态传感器。

如果单词的第一个字符是“o”,则输出为“正”,并且如果同一个单词后面有字符,则使用正则表达式为每个字符输出空。
但我不只接受“o”。

e.g. "oa" = "positive" , empty
     "aa" = 0
     "o"  = 0

到目前为止,我从 HFST 教程中得到了什么:

t = hfst.HfstBasicTransducer()
t.add_state(1)
t.add_state(2)
tr = hfst.HfstBasicTransition(1,"o","positive",0.0)
tr2 = hfst.regex("?:0")
t.add_transition(0,1,tr)
t.add_transition(1,2, tr2)

【问题讨论】:

  • 如果您可以指定您观察到的输入和输出之间的映射与您期望的映射(您已经展示过)相比,那就太好了。
  • 我不知道你所说的映射是什么意思,对不起。基本上我想观察的是语素。我的输出应该包含形态信息,我不知道我将如何呈现它,这就是为什么我暂时只使用任何输出。不知道这是否回答了你的问题。
  • 您的预期映射:"oa" -> "positive" + empty; "aa" -> "0"; "o" -> "0"; etc。这就是您在第一个代码片段中显示的内容。我很好奇您在使用代码时实际观察到的内容。
  • 好的,这只是我需要的众多规则之一。你有一个以“o”开头的单词,然后输出“o”的形态信息,比如说"NUM = Singular, PERSON = 1"。我们对这个词的以下字符不感兴趣,这就是为什么我假设我只为“o”后面的任何给定字符输出“空”。只有“o”必须与其他字符组合出现,并且必须位于首位。

标签: python transducer finite-state-automaton transducer-machines hfst


【解决方案1】:

缺少的步骤是lookup() 只会返回以最终状态结尾的路径,您可以使用transducer.set_final_weight(state, weight) 指定。

>>> import hfst
>>> t = hfst.HfstBasicTransducer()
>>> t.add_state(1)
1
>>> tr = hfst.HfstBasicTransition(1,'o', 'positive',0.0)
>>> t.add_transition(0,tr)
>>> t.set_final_weight(1,0.0)
>>> t.lookup('o')
{'o': [('positive', 0.0)]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多