我在努力让这件事成功。我想在给定的位置之间替换句子的某些部分,然后用变化显示整个句子。使用下面的代码,我可以进行更改,但我不知道如何将剩下的句子组合在一起。
我有两个数组,一个是显示女性名字的位置,另一个是男性名字。该代码将代词"her“替换为”her“,当一个女人在间隔之间在男人前面时。我最不需要的就是用所做的改变来重构句子,但我不知道如何提取句子的其余部分(例如,结果是从0到20 (玛丽亚的裙子)和36到51 (她的狗)的位置,但我需要从20到36 (彼得他的牛仔裤)和51到末尾(胡安他的车)合并他们的位置)。
结果应该是:“玛丽亚,她的裙子,彼得,他的牛仔裤,洛丽娜,她的狗,胡安,他的车”。我会很感激在这方面的任何帮助,我一直在寻找其他类似的问题,但我什么也没有发现。
<?php
$womenpos = array("0","36"); //these arrays are just examples of positions
$menpos = array("20","51"); //they will change depending on the sentence
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
echo $sentence."\n";
foreach ($womenpos as $index => $value) {
$value2 = $menpos[$index];
if($value < $value2) {
echo "\nWoman(" . $value . ") is before man(" . $value2 . ")\n";
$end = ($value2 - $value);
$improved = str_replace(' his ', ' her ',
substr($sentence, $value, $end));
echo $improved."\n";
} else {
$improved = "Nothing changed";
echo $improved;
}
}
发布于 2015-05-03 18:03:56
好吧,这个怎么样:
$womenpos = array("0","36");
$menpos = array("20","51");
$bothpos = array_merge($womenpos,$menpos);
sort ($bothpos);
print_r($bothpos);
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
echo $sentence."\n";
for ($i = 0; $i<sizeof($bothpos); $i++) {
$start = $bothpos[$i];
if ($i ==sizeof($bothpos)-1) {
$end = strlen($sentence);
}
else {
$end = $bothpos[$i+1];
}
$length = $end-$start;
$segment = substr($sentence, $start, $length);
if (in_array($start, $womenpos)) {
$new_segment = str_replace (' his ', ' her ', $segment);
}
else { $new_segment = $segment; }
$improved .= $new_segment;
print "<li>$start-$end: $segment : $new_segment </li>\n";
}
print "<p>Improved: $improved</p>";
这结合了男性和女性的位置数组,将每一段文本视为可能有错误的文本。如果这段文字从女性的某个点开始,那么它就把“他的”改为“她的”。如果不是的话,就让它一个人呆着。
这能让你朝着你想要的方向前进吗?要是那样就好了!
发布于 2015-05-03 09:02:04
这会以不同的方式处理这个问题,但我想知道它是否会提供您正在寻找的解决方案:
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
$women = array ("Maria", "Lorena");
$words = explode (" ", $sentence);
for ($i=0; $i< sizeof($words); $i++) {
if ($words[$i] == "his" && in_array($words[$i-1], $women)) {
$words[$i] = "her";
}
}
print (join(" ", $words));
如果前面的单词位于$women数组中,而当前的单词是"her“,则会将该单词更改为”her“。然后按照顺序把所有的单词都吐出来。
这样做可以满足您的需要,还是真的想要一个复杂的字符串定位答案?
https://stackoverflow.com/questions/30016065
复制