PHP标题修改

时间:2014-12-08 20:24:10

标签: php

我正在为scholar.google.com开发一个脚本。该脚本需要修改从http://www.ncbi.nlm.nih.gov/pubmed获得的文章标题。

因此,脚本必须从标题中删除所有特殊字符,数字和非拉丁字母以及刚刚提到的“触摸”字样/符号(未与特殊符号,字母或非分隔的单词)带空格的拉丁字母)。

所以我需要它来转换例如:

  

用NS1619进行大电导Ca2 +激活的K +通道激活   减少大鼠逼尿肌的肌原性和神经源性收缩平滑   肌肉。

成:

  

大电导通道激活,减少肌源性和   大鼠逼尿肌平滑肌的神经源性收缩。

另一个例子是转换它:

  

小鼠海马中fractalkine / CX3CL1的LTP损伤是介导的   通过腺苷受体3(A3R)的活性

成:

  小鼠海马中的LTP损伤是通过小鼠海马介导的   腺苷受体类型的活性

我已经拥有的是:

function rename_article ($article){
 global $alphabet;
 $pos_hyphen = strpos($article, "-");
 if ($pos_hyphen===FALSE){
   $article = preg_replace ("/[^a-zA-Z0-9\s]/"," ",$article);
  for ($i = 0; $article[$i]; $i++)
  {
   $article .= !is_numeric($article[$i]) ? $article[$i] : "";
  }
  return $article;
 }
 $substr = substr($article, 0, $pos_hyphen);

 $pos1 = strrpos($substr, ' ');
 if ($pos1 === FALSE){
  $pos1 =0;
 }
 $substr2 = substr($article, $pos_hyphen, strlen($article));
 $pos2 = strpos($substr2, ' ');

 if ($pos2 === FALSE){
  $pos2 = strlen($substr2);
 }

 $length1 = $pos_hyphen-$pos1;
 $length2 = $length1+$pos2;

 $substr = substr($article,$pos1,$length2);
 if ($length1<4){
  $article = str_ireplace ($substr, '' ,$article);
  rename_article ($article);
 }
 else{
  foreach ($alphabet as $letter){
   if (strpos($substr, $letter) != FALSE){
    $article = str_ireplace ($substr, '' ,$article);
    rename_article ($article);
   }
   else{
    $article = preg_replace ("/[^a-zA-Z0-9\s]/"," ",$article);
    for ($i = 0; $article[$i]; $i++)
    {
     $article .= !is_numeric($article[$i]) ? $article[$i] : "";
    }
    return $article;
   }
  }
 }
 $article = preg_replace ("/[^a-zA-Z0-9\s]/"," ",$article);
 for ($i = 0; $article[$i]; $i++)
 {
  $article .= !is_numeric($article[$i]) ? $article[$i] : "";
 }
 return $article;
};

但它并没有排除我上面所描述的词语。

请帮助

5 个答案:

答案 0 :(得分:1)

对于给定的示例,只是一个简单的方法:

function rename_article($article) {
    $return = "";
    $array = explode(" ",$article);
    foreach($array as $word) {
        if(preg_match("/^[a-zA-Z.]*$/",$word)) {
            $return.= " ".$word;
        }
    }
    return trim($return);
}

答案 1 :(得分:0)

首先按空格分割标题,然后用“字”检查“字”是否有效或应删除?

$title = "LTP impairment by fractalkine/CX3CL1 in mouse hippocampus is 
   mediated through the activity of adenosine receptor     type 3 (A3R)";

$title_words = preg_split('/\s+/', $title);

$new_title = "";

foreach ($title_words as $word) {
  if (preg_match('/^[a-z]+$/i', $word)) {
     $new_title .= " $word";
  } 
}

$new_title =  trim($new_title);

echo $new_title;

结果

LTP impairment by in mouse hippocampus is mediated through 
the activity of adenosine receptor type

答案 2 :(得分:0)

我想我会比你上面做的有点不同。我首先将标题分解为单词,然后只保留可接受的单词。

function rename_article( $title ) {
    $title = rtrim( $title, ".?!" );  // Added for punctuation at end of title
    $titleWords = explode( ' ', $title );
    $newTitle = '';
    foreach( $titleWords as $titleWord ) {
        if( !preg_match( '/[^a-zA-Z]/', $titleWord ) ) {
            if( empty( $newTitle ) )
                $newTitle = $titleWord;
            else
                $newTitle .= ' ' . $titleWord;
        }
    }
    return $newTitle;
}

答案 3 :(得分:0)

您需要做的第一件事是定义我们要移除的单词的实际模式并将其放入数组中。

显然+和 - 在那里,我猜/也是,还有任何数字?和()也是。希望我没有遗漏任何东西。数字字符保证取消资格的事实意味着如果你想要,你甚至不必使用一盎司的RegEx,你甚至可以手工将它们粘在数组中。

然后,取出原始句子并在空间(http://php.net/manual/en/function.explode.php

上爆炸

然后,稍微走一走,将值与原始数组(http://php.net/manual/en/function.array-walk.php

进行比较

如果爆炸数组的值不包含您已使用过的任何模式,请将其投入新数组。

将数组放回原位(http://php.net/manual/en/function.implode.php

trim()并在结束时粘贴一段时间。

而不是使用所有RegEX,我个人只是strpos()http://php.net/manual/en/function.strpos.php

希望这有帮助。

答案 4 :(得分:0)

试试这个

<?php
$string = "Large conductance Ca2+ -activated K+ channel activation
with NS1619 decreases myogenic and neurogenic contractions of rat detrusor smooth muscle.";

$string2 = "LTP impairment by fractalkine/CX3CL1 in mouse hippocampus is
 mediated through the activity of adenosine receptor type 3 (A3R)";


function getTitle($string){
    $s = explode(' ', $string);
    foreach($s as $key => $value){
        if(preg_match('/([a-z]+[0-9\+]|[\-]+[a-z0-9\+])|[0-9]/i', $value)){
           unset($s[$key]);
        }
    }
    return implode(' ', $s);
}

 echo getTitle($string2);
 echo getTitle($string);

输出

LTP impairment by in mouse hippocampus is mediated through the activity of adenosine receptor type

第二

Large conductance channel activation with decreases myogenic and neurogenic contractions of rat detrusor smooth muscle.