因此,對於我的大學畢業論文,我選擇構建一個Web應用程序,從文章(摘要應用程序)中提取主要想法。它建立在PHP中。從基於缺少某些單詞的另一個句子的文本中提取句子
但是,我已經達到了一個我看不到任何可能的解決方案的情況,也許你們可以給我一個想法或問題的解決方案。
所以基本上應用程序依賴於提取算法,我做的是: 首先,我「清理」文本,這意味着我刪除所有停用詞,我幹掉這些詞,刪除任何可能包含' 「。這可以改變我的文本不會被正確地分解成句子。 之後,我通過.
令牌爆炸文本將文本分解爲句子,並獲取數組中的所有句子。 現在是我給予句子評分的過程,基本上這就是我如何發現文章中最相關的句子,評分最高的句子通常是包含文章主要思想的句子。
但是我現在的問題從現在開始,我評價的句子就是我應用了所有「消毒」的句子,而且都不是原來的格式。我想拿最高評分的句子,並根據這一點我想從該評級句子匹配的文本中提取原始句子。我試圖將它與正則表達式匹配,但它並不總是工作。我需要一個100%的工作方法,根據評分最高的句子從文章中提取原文。
我不知道如何實現這一點,因爲額定的句子漏掉了它的單詞。 我希望你明白我的觀點。謝謝。
編輯: 這是我現在用文章的匹配原句的功能,但我並不總是奏效:
private function get_original_sentence($s, $t)
{
$s = preg_replace("/[^A-Za-z0-9 ]/", '', $s);
$s = trim($s);
$arr = explode(" ",$s);
$f_word = $arr[0];
$l_word = $arr[count($arr)-1];
preg_match('~(?<=\.)([a-zA-Z ]*)'.$f_word.'(.*?)'.$l_word.'([a-zA-Z ]*)(?=\.)~i', $t, $matches);
if(empty($string))
{
preg_match('~(?<=\.)([^\.]*)'.$f_word.'(.*?)'.$l_word.'([^\.]*)(?=\.)~i', $t, $matches);
}
return $matches[0] ? $matches[0] : false;
}
的$s
參數是總結和$t
之後額定句子是完整的原創文章。編輯2:縮寫刪除功能,它實際上消毒整個文本,不僅僅是縮寫。
static private function _remove_abbrev($subject)
{
$domains = '\.ro|\.com|\.edu|\.org|\.gov';
foreach(self::$abrv as $abrv)
{
$not.= strtolower(str_replace('.', '\.', $abrv)).'|';
$not.= strtolower(trim(str_replace('.', '\.', $arbv))).'|';
}
$not = substr($not, 0, -1);
//$subject = preg_replace('~(\".*?\")~u', '', strtolower($subject));//replaces " " from text.
$subject = preg_replace('~(?<=\.|^)(?![^\.]{60,})[^\.&]*\&[^\.]*\.?~u', '', strtolower($subject));
$subject = preg_replace('~\b\s?[\dA-za-z\-\.]+('.$domains.')~u', '', strtolower($subject));
$subject = preg_replace('~\s*\(.*?\)\s*~u', '', strtolower($subject));
$subject = preg_replace('~\b('.$not.')~u', '', strtolower($subject));
$subject = preg_replace('~(?<=[^a-z])[A-Za-z]{1,5}+\.[\s\,]*(?=[a-z]|[0-9])~u', '', strtolower($subject));
$subject = preg_replace('~(?<=[\s\,\.\:])([A-Za-z]*(\.)){2,}+(.)(?=.*)~u', '', strtolower($subject));
$subject = preg_replace('~(\d)+\.(\d)*(\s)~u', '', strtolower($subject));
return $subject;
}
這是縮寫數組集合:
static public $abrv = array(
' alin.', ' art.', ' A.N.P', ' A.V.A.B', ' A.V.A.S.', ' B.N.R', ' c.', ' C.A.S', ' C.civ.', ' C.com.', ' C.fam.', ' C.pen.', ' C.pr.civ.', ' C.pr.pen', ' C.N.C.D', ' C.N.V.M', ' C.N.S.A.S', ' C.S.M', ' C.S.J', ' D.G.F.P', ' D.G.P.M.B', ' D.N.A', ' D.S.V', 'Ed.', ' etc.', ' H.G.', ' I.G.P.F', ' I.G.P.R', ' I.N.M.L.', ' I.P.J', ' I.C.C.J', ' lit.', ' M.Ap.N.', ' art.', ' M.J.', ' M.Of.', ' nr.', ' O.G.', ' O.U.G.', ' p.', ' P.N.A.', ' par.', ' pct.', ' R.A.A.P.P.S.', ' subl. ns.', ' S.C.', ' S.A.', ' S.P.P.', ' S.R.I.', ' S.R.L.', 'U.N.B.R.', ' urm.', ' str.', ' sec.', ' pag.', ' a.c.', ' dv.', ' dvs.', ' prof.', ' conf.', ' dr.', ' drd.', ' mrd.', ' s.a.m.d'
);
@FrayneKonok編輯的代碼的答案。 – southpaw93
是的,我明白了,現在人們可以幫助你。 –
我想你應該分配句子獨特的ID – noreabu