10

ユーザーが次のようなテキストのブロックを提供するような、特定の実装が必要でした。

"要件 - Linux、Apache 2、MySQL 5、および PHP 5 を使用した LAMP 環境での実用的な知識 - Web 2.0 標準の知識 - JSON に慣れている - フレームワーク、Zend、OOP の操作に関する実践的な経験 - クロス ブラウザー Javascripting、JQuery など. - サブバージョンなどのバージョン管理ソフトウェアの知識があることが望ましいです。"

私がやりたいことは、関連するキーワードを自動的に選択してタグ/キーワードを作成することです。したがって、上記のテキストの場合、関連するタグは次のようになります: mysql、php、json、jquery、バージョン管理、oop、web2.0、javascript

PHP/Javascriptなどでそれを行うにはどうすればよいですか? ヘッドスタートは本当に役に立ちます。

4

4 に答える 4

20

非常に単純な方法は、一般的なストップワードをテキストから削除て、「標準」、「JSON」などのより意味のある単語を残すことです。ただし、それでも多くのノイズが発生するため、OpenCalaisのようなサービスを検討してください。テキストのかなり洗練された分析を行います。

アップデート:

さて、私の以前の回答のリンクは実装を指していましたが、あなたはそれを求めたので、簡単なものはここにあります:

function stopWords($text, $stopwords) {

  // Remove line breaks and spaces from stopwords
    $stopwords = array_map(function($x){return trim(strtolower($x));}, $stopwords);

  // Replace all non-word chars with comma
  $pattern = '/[0-9\W]/';
  $text = preg_replace($pattern, ',', $text);

  // Create an array from $text
  $text_array = explode(",",$text);

  // remove whitespace and lowercase words in $text
  $text_array = array_map(function($x){return trim(strtolower($x));}, $text_array);

  foreach ($text_array as $term) {
    if (!in_array($term, $stopwords)) {
      $keywords[] = $term;
    }
  };

  return array_filter($keywords);
}

$stopwords = file('stop_words.txt');
$text = "Requirements - Working knowledge, on LAMP Environment using Linux, Apache 2, MySQL 5 and PHP 5, - Knowledge of Web 2.0 Standards - Comfortable with JSON - Hands on Experience on working with Frameworks, Zend, OOPs - Cross Browser Javascripting, JQuery etc. - Knowledge of Version Control Software such as sub-version will be preferable.";

print_r(stopWords($text, $stopwords));

stop_word.txtこれと、このGistの内容を見ることができます。

サンプル テキストで上記を実行すると、次の配列が生成されます。

Array
(
    [0] => requirements
    [4] => linux
    [6] => apache
    [10] => mysql
    [13] => php
    [25] => json
    [28] => frameworks
    [30] => zend
    [34] => browser
    [35] => javascripting
    [37] => jquery
    [38] => etc
    [42] => software
    [43] => preferable
)

したがって、私が言ったように、これはやや素朴で、より多くの最適化を使用することができます (さらに遅い) が、テキストからより関連性の高いキーワードを引き出します。ストップワードも微調整する必要があります。のような用語をキャプチャするのWeb 2.0は非常に難しいので、テキストを理解してエンティティと参照のリストを返すことができる OpenCalais のような本格的なサービスを使用する方がよいと思います。DocumentCloudは、まさにこのサービスに依存して、ドキュメントから情報を収集します。

また、クライアント側の実装では、JavaScript を使用してほぼ同じことを行うことができ、おそらくはるかにクリーンになります (ただし、クライアントにとっては遅くなる可能性があります)。

于 2011-01-28T13:06:47.280 に答える
2

これは、ある種のファジー ロジックを必要とするため、簡単ではありません。Yahoo Term エクストラクタ YQL を使用する必要があります

それをチェックしてください:リンク

于 2011-01-28T12:29:49.203 に答える
0

クライアントのキーワード/タグを表示するかどうか、またはテキスト ブロックからキーワード/タグを抽出するかどうかに応じて、それらをさらに計算します。

それらを表示するだけでよい場合は、クライアント側の処理で問題ありません。さらに計算するためにそれらが必要な場合は、サーバー側の処理を使用してください。

さらに詳細を提供できる場合は、javascript クライアント側の実装をお勧めします。キーワードを一般的に「知りたい」場合は、ある種の巧妙な解決策が必要です

キーワードのリストがある場合は、正規表現を使用してデータを抽出できます

于 2011-01-28T12:34:07.850 に答える