有人有关于代词替换的建议吗?我想使用表单%的关键字%来替换用户,使用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会产生相同的错误输出。
答案 0 :(得分:2)
你的占位符还需要记录代词的变形:主格,属格,占有欲等。英语中仍有变形的少数几个地方之一是代词,而'谁'与'谁'在出路。
不幸的是,说英语的人甚至在日常演讲中也不擅长制定规则('我和'我'一直都在转换),并且(至少在美国)并没有真正教授正式的不同案件的名称。 ( “所有格?”)。因此,提出一种对用户来说很容易的方法将会非常具有挑战性。
我建议将%possessive%
作为占位符,并将可能的替换设置为$third['male']['possessive'] = 'his'
,$third['female']['possessive'] = 'her'
,以允许$first['possessive'] = 'my'
。
答案 1 :(得分:1)
您必须映射大量可能的变形并使用匹配的占位符: 在这种情况下,即使单独使用第三人称代词,也需要处理一些重叠(即,在对象和从属占有之间等)。对于涵盖所有案例/表格的样本数组:
$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帮助我思考。