代词替换

Pronoun subsitution

有人对代词替换有什么建议吗?我想让这对用户来说很容易,使用形式 %keywords% 将被替换为 php str_replace 数组。但是英语很难。

示例:

$input='%his% house is %his%, and you can visit %him% there.';
$from[]='%his%';$from[]='%him%';
if($gender=='male'){
  $to[]='his';$to[]='him';
}
else{
  to[]='hers';$to[]='her';
}
echo str_replace($from, $to, $input);

输出:

他的房子是他的,你可以去那里拜访他<<= OK!

她的房子是她的,你可以去那里拜访她<<==SUCKS!!

示例 2:

$input='%her% house is %hers%, and you can visit %her% there.';
$from[]='%hers%';$from[]='%her%';
if($gender=='male'){
  $to[]='his';$to[]='him';
}
else{
  to[]='hers';$to[]='her';
}
echo str_replace($from, $to, $input);

输出:

他的房子是他的,你可以去那里拜访他<<=糟透了!!

她的房子是她的,你可以去那里拜访她<<==OK!!

有时候我讨厌英语。 关于如何管理这个的任何想法?

仅供参考,this answer 产生相同的错误输出。

您的占位符还需要记录代词的变形:主格、属格、所有格等。英语仍然有变形的少数地方之一是代词,'who' 与 'whom'即将离开。

不幸的是,即使在日常演讲中,说英语的人也确实不擅长正确使用规则('I' 和 'me' 一直在切换),并且(至少在美国是这样)并没有真正教授不同案例的正式名称。 ("Genitive?")。因此,想出一种对用户来说很容易的方式将非常具有挑战性。

我建议将 %possessive% 作为占位符,并且可能的替换可能像 $third['male']['possessive'] = 'his'$third['female']['possessive'] = 'her',以允许 $first['possessive'] = 'my'

您必须映射所有可能的变形并使用匹配的占位符: 在这种情况下,即使单独使用第三人称代词,也有一些重叠需要处理(即宾语和从属所有格之间等)。对于覆盖所有 cases/forms:

的示例数组
$pronouns['3rd']['male'] = [
    'subj' => 'he',
    'obj' => 'him',
    'poss' => 'his',
    'poss_ind' => 'his',
    'refl' => 'himself',
];

$pronouns['3rd']['female'] = [
    'subj' => 'she',
    'obj' => 'her',
    'poss' => 'her',
    'poss_ind' => 'hers',
    'refl' => 'herself',
];

然后将占位符标记为 %obj%%poss%,或者将完整形式标记为 %object% 等,如果您愿意的话。或者 %3rd:obj% 等,如果您需要处理模板中的所有人。但是考虑到重叠,如果你想得到这个正确的,这里没有办法绕过所有的语法。

祝你好运,让你的用户了解 dependent/independent 物主代词等之间的区别,但除此之外,你还必须想出一个语义分析算法,从中扣除适当的变形上下文。您可以制作一个带有适当图标的点击添加标签界面,这些图标说明 dependent/independent 所有格等。:)

经过进一步审查,我认为我找到了一种更简单的方法,可以满足所有情况,并且用户也很容易理解。 我将使用第三人称复数作为关键字

  • 他们 > 他/她
  • 他们>他/她
  • 他们 > 他/她
  • 他们的 > 他/她的

感谢您通过 Jerry 和 Markus AO 帮助我思考这个问题。