1

我想获取正文标记中的内容..将它们分隔为单词并将单词放入数组中..am 使用 php 这就是我所做的

$content=file_get_contents($_REQUEST['url']);
$content=html_entity_decode($content);
$content = preg_replace("/&#?Ã[a-z0-9]+;/i"," ",$content); 
$dom = new DOMDocument;
@$dom->loadHTML($content);
$tags=$dom->getElementsByTagName('body');
foreach($tags as $h)
{
echo "<li>".$h->tagName;
 getChilds2($h);    

function getChilds2($node)
{

  if($node->hasChildNodes())
   { 
   foreach($node->childNodes as $c)
    { 
        if($c->nodeType==3)
         {

           $nodeValue=$c->nodeValue;   
            $words=feature_node($c,$nodeValue,true);
           if($words!=false)
             {
              $_ENV["words"][]=$words;

             } 

             else if($c->tagName!="")
             {


             getChilds2($c);  
              }
        }
      }

   }
  else
  {
   return;
  }
}
function feature_node($node,$content,$display)
{

 if(strlen($content)<=0)
  {
   return;
   }

 $content=strtolower($content);
 $content=mb_convert_encoding($content, 'UTF-8',
      mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
    $content= drop_script_tags($content);       
$temp=$content;
$content=strip_punctuation($content);
$content=strip_symbols($content);
$content=strip_numbers($content);
$words_after_noise_removal=mb_split( ' +',$content);
$words_after_stop_words_removal=remove_stop_words($words_after_noise_removal);
if(count($words_after_stop_words_removal)==0)
 return(false);
$i=0;
foreach($words_after_stop_words_removal as $w)
   {

      $words['word'][$i]=$w;
      $i++;
   }

for($i=0;$i<sizeof($words['word']);$i++)
 { 
   $words['stemmed'][$i]= PorterStemmer::Stem($words['word'][$i],true)."<br/>";
 }

 return($words);
}

在这里,我使用了一些函数,如 strip_punctuation、strip_symbols、strip_numbers、remove stop_words 和 porterstemmer 来预处理页面..它们工作得很好..但我没有将内容放入数组中,而 print_r() 或 echo 什么也没提供..help plz ?

4

1 回答 1

2

您不必遍历节点。

$tags = $dom->getElementsByTagName('body');

在 DOMNodeList 中只会给你一个结果。所以你需要做的就是获取文本

$plainText = $tags->item(0)->nodeValue;

或者

$plainText = $tags->item(0)->textContent;

要将单独的单词放入数组中,您可以使用

就结果$plainText而言

于 2013-02-27T18:33:51.107 回答