我正在尝试为莫尔斯电码培训师生成随机的英语练习短语。我想弄清楚如何用英语处理性别协议。我希望能够生成诸如“他是儿子”、“她是母亲”、“这是一扇门”之类的短语,但要避免诸如“他是母亲”、“她是一扇门”之类的词组, “这是一个父亲”。“他是母亲”混合了性别,“她是一扇门”和“它是父亲”这样的句子混合了人类/非人类。似乎在 rgl 中,人类和非人类都有Gender
类型。
有时这种事情是可以接受的,例如“没有人是一座孤岛”这句话。而且,出于某种原因,性别揭露派对经常使用诸如“它是男孩!”之类的短语。但是,我只是想生成训练数据,所以我试图专注于常见用法。
我对语法框架很陌生,所以我可能完全错误地处理这个问题。这是我到目前为止所拥有的,
在Agreement.gf
abstract Agreement = {
flags startcat = Message ;
cat
Message ; Subject ; SubjectComplement ;
fun
Is : Subject -> SubjectComplement -> Message ;
He, She, It : Subject;
Son, Daughter, Father, Mother, Fence, Door : SubjectComplement;
}
在AgreementEng.gf
concrete AgreementEng of Agreement = open DictEng, SyntaxEng, ParadigmsEng, VerbEng, ResEng in {
lincat
Message = Cl ;
Subject = NP;
SubjectComplement = CN;
lin
Is s sc = mkCl s sc;
He = DictEng.he_Pron;
She = DictEng.she_Pron;
It = DictEng.it_Pron;
Son = mkCN son_N;
Daughter = mkCN daughter_N;
Mother = mkCN mother_N;
Father = mkCN father_N;
Fence = mkCN fence_N;
Door = mkCN fence_N;
}
如果我将其加载gf
并运行generate_random | linearize
,它会起作用,但会忽略性别和人性。
我看到DictEng
代词有一些性别/非人类标记,
lin she_Pron = mkPron "she" "her" "her" "hers" singular P3 feminine ;
lin he_Pron = mkPron "he" "him" "his" "his" singular P3 masculine ;
lin it_Pron = mkPron "it" "it" "its" "its" singular P3 nonhuman;
虽然不是大多数名词,
lin mother_N = mkN "mother" "mothers";
lin daughter_N = mkN "daughter" "daughters";
虽然有些确实有性别标记,
lin actor_N = mkN masculine (mkN "actor" "actors");
lin actress_N = mkN feminine (mkN "actress" "actresses");
你会如何处理这个问题?
我愿意接受有关本准则任何方面的建议——不仅仅是性别问题。我的总体目标是生成越来越复杂、含糊不清的英语短语。想想 Duo Lingo——但对于摩尔斯电码。我将有一堆训练级别,这些级别建立在以前的级别之上,添加新词汇、更长的句子等。
目前,我不关心非英语语言——这对未来的我来说是个问题。我也不需要支持DictEng
. 潜在的单词和短语列表将被手工整理。
使用目前显示的内容,我将从训练单个单词开始,“他”、“她”、“它”、“是”、“儿子”等。
然后是简单的短语“他是”,“她是”,“它是”。
然后最后像“他是儿子”这样的完整句子。
然后我会添加复数,“我们”,“他们”,“是”,“儿子”等。然后我会单独训练新词。然后是“我们是”,“他们是”等短语。然后是“我们是父亲”的句子。然后我会混合单数和复数的句子。
因此,在语法文件中,我需要生成这些不同类型的训练短语的粒度。
谢谢!
(不确定这是否重要,但我有几十年的 Haskell 经验,并且涉足 Idris 之类的东西。所以我认为我对语法框架语言很好——我的麻烦更多在于理解库(rgl)和大局)。