2009-06-26 74 views
1

我如何從一個字符串中使用PHP或JavaScript提取專有名詞/數值? 例如像那裏有如何從使用PHP或JavaScript的字符串中提取專有名詞?

字符串的Xyz 分鐘前訪問過該網頁此頁面。

我希望能夠認識到「XYZ」和「53」作爲專有名詞分別

+1

有沒有簡單的方法來做到這一點。你將不得不考慮「自然語言處理/識別」的廣泛領域 – jitter 2009-06-26 09:39:08

回答

1

的一個明顯的方法是有適當的已知,一本字典和一些很好的索引快速通過搜索到的數字,如果存在這樣的事情。

但我覺得你正在尋找一種方法來從語法上推斷出一個詞是專有名詞。

我想不出任何完美的方法來做到這一點,但如果你創建了一系列規則,你可以使用它們來解析一段文字。

規則可能包括。 與LY結束*字不是一個專有名詞 *噪音的詞語,如和,到,但等不恰當的名詞 *有大寫字母,但不啓動一個句子是專有名詞

話爲了改善它,你可以使用這些規則來創建專有名詞詞典。每當一個單詞遵循這些規則之一時,它就會被添加到專有名詞詞典中或從專有名詞詞典中刪除。

這是非常粗糙的 - 如果這是正確的軌道,那麼perhas我可以更具體。

+0

我希望能通過正則表達式或soemthing 來實現這一點。 /([^.))(s)+([AZ]{1}[az]+)/ 但是這個正則表達式dosent匹配了兩個連續的專有名詞......例如「name is Abb Bayer」... – Annibigi 2009-06-26 09:43:51

0

如果它在句子中總是一個專有名詞,那麼你可以通過查找以大寫字母開頭的單詞來找到它。如果除第一個單詞外沒有其他單詞,那麼它就是這樣。如果Xyz被命名爲Bim de Verdier或者它實際上沒有大寫,則會出現問題。

// Get the number with JavaScript and RegExp 
var regex = new RegExp("\d+"); 
var match = regex.exec("Xyz visisted this page this page 53 mins ago."); 
if (match == null) { 
    alert("No match"); 
} else { 
    var s = ""; 
    for (i = 0; i < match.length; i++) { 
    s = s + match[i] + "\n"; 
    } 
    alert(s); 
} 

大寫的單詞可以與「[A-Z] [a-z] + []」匹配。

0

的PHP函數is_numericucfirst可以幫助識別的話:

function parse_name_and_number($sentence) { 
    $words = explode(' ', $sentence); 
    $name = array(); 
    foreach ($words as $word) { 
     if (is_numeric($word)) 
      $number = $word; 
     elseif ($word == ucfirst($word)) 
      $name[] = $word; 
    } 
    $name = implode(' ', $name); 
    return array('name' => $name, 'number' => $number); 
} 

print_r(parse_name_and_number('Xyz visited this page 53 minutes ago')); 
// output: Array ([name] => Xyz [number] => 53) 

print_r(parse_name_and_number('we thought Bim de Verdier visited the page 5 seconds ago')); 
// output: Array ([name] => Bim Verdier [number] => 5) 

print_r(parse_name_and_number('Weirder input messes up the results')); 
// output: Array ([name] => Weirder [number] =>) 
0

最佳選擇是使用鏈接的語法。解析句子並提取專有名詞。

www.link.cs.cmu.edu/link

0
Xyz visisted this page this page 53 mins ago. 

現在,剛剛獲得「visisted此頁」或什麼的位置,那就是從森泰斯的開始你的長度。例如,如果「Person」總是在開頭,那麼只需將起點設置爲7並從第一個數字中減去7即可。這裏有一個快速JS例子:

alert(str.substr(7, str.IndexOf("visited") - 7)); 

這應該返回「Xyz」。希望有所幫助。當然,這隻有在你知道你的句子的結構時纔有效,在給出的例子中就是這種情況。

P.S.我知道我遲了兩年,但這對未來可能有幫助。

相關問題