2009-06-26 4 views
1

PHPまたはJavaScriptを使用して文字列から固有名詞/数値を抽出するにはどうすればよいですか? 例はエクシーズが分前このページにこのページを訪れたPHPまたはJavaScriptを使用して文字列から固有名詞を抽出するにはどうすればよいですか?

のような文字列をtheresの。

私は1つの明白な方法は、すぐにそれを検索するための適切knownsの辞書といくつかの良いインデックスを持つことで、

+1

これを行う簡単な方法はありません。"自然言語処理/認識"の広範な分野を調べなければならないでしょう – jitter

答えて

1

それぞれ「XYZ」を認識できるようにしたいと固有名詞や数値として「53」そんなことがあれば。

しかし、私は文法的に単語が固有名詞であると推測する方法を探していると感じています。

これを行うには完全な方法は考えられませんが、一連のルールを作成した場合は、これらを使用してパッセージを解析できます。

ルールに含まれる可能性があります。 LYで終わる *言葉は、そのようなと、になど *ノイズワード固有名詞ではなく、などの固有名詞はありません *大文字が含まれていますが、文を開始していない単語が固有名詞

ですそれを改善するために、これらの規則を使用して固有名詞の辞書を作成することができます。単語がこれらのルールのいずれかに従うたびに、適切な名詞辞書に追加または削除されます。

これは非常に荒いです - これが正しいトラックにある場合、私はより具体的にすることができます。

+0

私は正規表現やsoemthingでこれを実現したいと考えていました 例: /([^.])(\s)+([AZ]{1}[az]+)/ しかし、この正規表現は、2つの固有名詞に一致します...例えば、 "名前はAbbバイヤー"です... – Annibigi

+0

これを達成するための簡単な方法はありません。私はこれを解決することには至りませんでしたが、それについてはまだ考えています。私はこれをするために多くのことをする必要があることを認めます – Annibigi

0

文中に常に固有名詞が1つある場合は、大文字で始まる単語を検索すると見つかります。そして、最初の言葉以外のものがなければ、それはそれです。問題は、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は、単語 "[A-Z] [-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.私は2年遅れていることを知っていますが、これは将来誰かを助けるかもしれません。

関連する問題