我如何從一個字符串中使用PHP或JavaScript提取專有名詞/數值? 例如像那裏有如何從使用PHP或JavaScript的字符串中提取專有名詞?
字符串的Xyz 分鐘前訪問過該網頁此頁面。
我希望能夠認識到「XYZ」和「53」作爲專有名詞分別
我如何從一個字符串中使用PHP或JavaScript提取專有名詞/數值? 例如像那裏有如何從使用PHP或JavaScript的字符串中提取專有名詞?
字符串的Xyz 分鐘前訪問過該網頁此頁面。
我希望能夠認識到「XYZ」和「53」作爲專有名詞分別
的一個明顯的方法是有適當的已知,一本字典和一些很好的索引快速通過搜索到的數字,如果存在這樣的事情。
但我覺得你正在尋找一種方法來從語法上推斷出一個詞是專有名詞。
我想不出任何完美的方法來做到這一點,但如果你創建了一系列規則,你可以使用它們來解析一段文字。
規則可能包括。 與LY結束*字不是一個專有名詞 *噪音的詞語,如和,到,但等不恰當的名詞 *有大寫字母,但不啓動一個句子是專有名詞
話爲了改善它,你可以使用這些規則來創建專有名詞詞典。每當一個單詞遵循這些規則之一時,它就會被添加到專有名詞詞典中或從專有名詞詞典中刪除。
這是非常粗糙的 - 如果這是正確的軌道,那麼perhas我可以更具體。
我希望能通過正則表達式或soemthing 來實現這一點。 /([^.))(s)+([AZ]{1}[az]+)/ 但是這個正則表達式dosent匹配了兩個連續的專有名詞......例如「name is Abb Bayer」... – Annibigi 2009-06-26 09:43:51
如果它在句子中總是一個專有名詞,那麼你可以通過查找以大寫字母開頭的單詞來找到它。如果除第一個單詞外沒有其他單詞,那麼它就是這樣。如果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] + []」匹配。
的PHP函數is_numeric
和ucfirst
可以幫助識別的話:
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] =>)
最佳選擇是使用鏈接的語法。解析句子並提取專有名詞。
www.link.cs.cmu.edu/link
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.我知道我遲了兩年,但這對未來可能有幫助。
有沒有簡單的方法來做到這一點。你將不得不考慮「自然語言處理/識別」的廣泛領域 – jitter 2009-06-26 09:39:08