Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP计算XML文本中的单词数_Php_Xml_Text - Fatal编程技术网

使用PHP计算XML文本中的单词数

使用PHP计算XML文本中的单词数,php,xml,text,Php,Xml,Text,真的,这个问题我没有合适的标题。只是我研究中的一些奇怪问题。这是一个例子: XML文本: The <tag1>quick brown fox</tag1> <tag2>jumps over</tag2> the lazy <tag1>dog</tag1> 敏捷的棕色狐狸跳过了懒狗 总字数(标记内的文本计为一个字):6 如果我的问题是: 在文本中的位置如何?答案是2和6 在文本中的位置如何?答案是3 “懒惰”一词在文本中的

真的,这个问题我没有合适的标题。只是我研究中的一些奇怪问题。这是一个例子:

XML文本:

The <tag1>quick brown fox</tag1> <tag2>jumps over</tag2> the lazy <tag1>dog</tag1>
敏捷的棕色狐狸跳过了懒狗 总字数(标记内的文本计为一个字):6

如果我的问题是:

在文本中的位置如何?答案是26

在文本中的位置如何?答案是3

“懒惰”一词在文本中的位置如何?答案是5

有人知道吗?我对此一无所知

有人知道吗?我对此一无所知

您可以将XML文本作为XML加载到中,例如作为的一部分。然后迭代该元素的所有子节点并决定:

  • 对于每个元素,计算+1
  • 每一篇课文,你+通过计算课文中的单词(参见其他问答材料如何计算课文中的单词)
当您完成迭代时,您就有了字数

示例代码:

<?php
/**
 * Count Words on XML Text Using PHP
 * @link https://stackoverflow.com/a/17670772/367456
 */

$xmlText = <<<BUFFER
The <tag1>quick brown fox</tag1> <tag2>jumps over</tag2> 
  the lazy <tag1>dog</tag1>
BUFFER;

$doc    = new DOMDocument();
$result = $doc->loadXML(sprintf('<root>%s</root>', $xmlText));
if (!$result) {
    throw new Exception('Invalid XML text given.');
}

/**
 * replace this function with your own implementation that works
 * for all your UTF-8 strings, this is just a quick example mock.
 */
function utf8_count_words($string) {
    return (int)str_word_count($string);
}

$wordCount = 0;
foreach ($doc->documentElement->childNodes as $node) {
    switch ($node->nodeType) {
        case XML_ELEMENT_NODE:
            $wordCount++;
            break;
        case XML_TEXT_NODE:
            $wordCount += utf8_count_words($node->data);
            break;
        default:
            throw new Exception(
                sprintf('Unexpected nodeType in XML-text: %d', $node->nodeType)
            );
    }
}

printf("Result: %d words.\n", $wordCount);

使用这些函数创建一个事件驱动的解析器,然后你就可以对每个令牌进行排序,并创建一个数据产品来存储它们,这样你就可以按照你想要的方式搜索它们。如果你对xmllol做了一些错误的事,我很抱歉,在XD之前,我们是否允许在标准XML的标记之间使用文本?我从中得到了启发,谢谢。我只是添加一点代码来得到我问题的答案。再一次,谢谢
Result: 6 words.