代词替换

时间:2016-12-26 18:20:52

标签: php replace str-replace

有人有关于代词替换的建议吗?我想使用表单%的关键字%来替换用户,使用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);

输出:

他的房子是他的,你可以在那里看望他<< = SUCKS !!

她的房子是她的,你可以在那里看望她<< == OK !!

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

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

3 个答案:

答案 0 :(得分:2)

你的占位符还需要记录代词的变形:主格,属格,占有欲等。英语中仍有变形的少数几个地方之一是代词,而'谁'与'谁'在出路。

不幸的是,说英语的人甚至在日常演讲中也不擅长制定规则('我和'我'一直都在转换),并且(至少在美国)并没有真正教授正式的不同案件的名称。 ( “所有格?”)。因此,提出一种对用户来说很容易的方法将会非常具有挑战性。

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

答案 1 :(得分:1)

您必须映射大量可能的变形并使用匹配的占位符: English Personal Pronouns 在这种情况下,即使单独使用第三人称代词,也需要处理一些重叠(即,在对象和从属占有之间等)。对于涵盖所有案例/表格的样本数组:

$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%等,如果您需要处理模板中的所有人员。但是考虑到重叠,如果你想要得到正确的话,那么就没有办法解决全面的语法。

祝你的用户了解依赖/独立占有代词等之间的区别,但除此之外,你必须提出一种语义分析算法,从上下文中推导出适当的变形。您可以将点击添加标签界面与适当的图标组合在一起,这些图标说明了依赖/独立的所有格等。:)

答案 2 :(得分:0)

在进一步审核时,我认为我找到了一种更简单的方法,可以满足所有情况,并且用户可以非常简单地理解。 我将第三人称复数用于关键字

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

感谢您通过Jerry和Markus AO帮助我思考。