gpt4 book ai didi

php - 使用 PHP 打破 XML 中的句子

转载 作者:可可西里 更新时间:2023-11-01 01:14:45 26 4
gpt4 key购买 nike

我是 PHP 的新手,我有一个 xml 文件,我想使用 PHP 将 xml 文件中的句子提取到一个数组中,每次将句子分解为 3 个单词。句子将被分成几部分。
下面的 XML 来自一个 XML 文件。

<?xml version="1.0" encoding="utf-8" ?>
<document>
<content>
<segment>
<sentence>
<word>Hi</word>
<word>there</word>
<word>people</word>
<word>I</word>
<word>want</word>
<word>to</word>
<word>introduce</word>
<word>you</word>
<word>to</word>
<word>my</word>
<word>world</word>
</sentence>
<sentence>
<word>Hi</word>
<word>there</word>
<word>people</word>
<word>I</word>
<word>want</word>
<word>to</word>
<word>introduce</word>
<word>you</word>
<word>to</word>
<word>my</word>
<word>world</word>
</sentence>
</segment>
</content>
</document>

输出将是:

Hi there people
I want to
introduce you to
my world
Hi there people
I want to
introduce you to
my world

我已经创建了一个函数来处理 xml 脚本。

function loadTranscript($xml) {
$getfile = file_get_contents($xml);
$arr = simplexml_load_string($getfile);
foreach ($arr->content->segment->sentence as $sent) {
$count = str_word_count($sent,1);
$a=array_chunk($count,3);
foreach ($a as $a){
echo implode(' ',$a);
echo PHP_EOL;
}
}
}

但无法生成输出。 $sent 是否被视为数组?我想在 XML 级别打断句子。

最佳答案

我不确定为什么每个人都对 SimpleXML 如此害怕,但我认为它绝对是完成这项工作的正确工具。

$sent不是数组,而是表示 <sentence> 的对象元素及其所有子元素;它有一些类似数组的属性,但不是 array_chunk可以一起工作。

您实际上可以使用 array_chunk ,但您需要做三件事才能使当前代码正常工作:

  • $sent使用 (array)$sent 从对象到数组(这将给出 <sentence> 节点的 所有 子节点的数组)或 (array)$sent->word (这会将其限制为称为 <word> 的那些,以防混合)
  • 将该数组传递给array_chunk , 不是 $count (你不需要)
  • 不要两次使用具有冲突含义的相同变量 (foreach( $a as $a ))

所以:

$chunks = array_chunk((array)$sent->word, 3);
foreach ($chunks as $a_chunk) {
echo implode(' ', $a_chunk);
echo PHP_EOL;
}

或者,你可以不用 array_chunk只需每三个单词显示一个换行符就足够简单了:

$counter = 0;
foreach ( $words as $word ) {
$counter++;
echo $word;
if ( $counter % 3 == 0 ) {
echo PHP_EOL;
} else {
echo ' ';
}
}

然后您需要做的就是将该循环嵌套在您现有的循环中:

foreach ($arr->content->segment->sentence as $sent) {
$counter = 0;
foreach ( $sent->word as $word ) {
$counter++;
echo $word;
if ( $counter % 3 == 0 ) {
echo PHP_EOL;
} else {
echo ' ';
}
}
echo PHP_EOL;
}

由您决定,您认为哪个更干净,但最好了解两者,以便您可以根据 future 的需要调整它们。

关于php - 使用 PHP 打破 XML 中的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42000383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com