4

データベースからの従業員名のリストがあると仮定します (数千、近い将来には数万になる可能性があります)。問題を単純化するために、各名/姓の組み合わせが一意であると仮定します (大きな if ですが、正接です)。

また、ビジネスに関連するニュース コンテンツの RSS ストリームもあります (これも、1 日に数百のアイテムになる可能性があります)。

私がやりたいのは、従業員の名前がいくつかの段落のニュース項目に表示されているかどうかを検出し、そうであれば、その項目にその話題の人物を「タグ付け」することです。

1 つのニュース項目に複数の従業員が名前を挙げている可能性があるため、最初の肯定的な一致の後でループを中断することはできません。

私は確かに力ずくで物事を行うことができます.すべてのニュース項目について、すべての従業員名をループし、正規表現が一致を返す場合はそれをメモします.

ColdFusion でもっと簡単な方法はありますか? または、ネストされたループをそのまま使用する必要がありますか?

4

3 に答える 3

7

あなたができることとしてこれをそこに投げ出すだけです...

ほぼ満場一致で、投稿あたりの単語よりもはるかに多くの従業員名が表示されるようです。これが私がそれを処理する方法です:

フィードと onAppStart を取り込む常時実行の CF アプリを用意する

  1. データベースからすべての従業員を取得します
  2. 名をキーとして、姓の構造体を値として、アプリ スコープのルックアップ構造体を作成します (必要に応じて、姓にミドル ネームの兄弟を追加することもできます)。

したがって、ルックアップの 1 つのキーは、値として 2 つのキー ( "Johnson" および "Forta" ) を持つ構造体を持つ "Vanessa" である可能性があります。

次に、解析する各記事を区切り文字としてスペースを使用して listToArray し、各トークンで単純な structKeyExists を実行して配列をループします。一致する場合は、配列内の次の項目を姓として確認します。

これは、多くの検索を行うよりも処理面ではるかにパフォーマンスが高く、コーディングにほとんど時間がかからず、将来のソースを非常に簡単にフィードできると思います(チェッカーは1つの引数、地球上の任意のテキストを取ります)。

あなたがどのルートをたどるか、そしてあなたの実験が CF のパフォーマンスについて何か新しいことを明らかにするかどうかを知りたいです。

于 2012-07-01T00:41:00.883 に答える
0

マシュー、あなたには難題があり、課題/解決策には実際には複数の部分があります。しかし、値のリストを特定のテキストのセットと比較して、それらのいずれかがそこにあるかどうかを確認するという点では、誰も CF 関数を実行できないことがわかります。そのため、cflib で入手できる新しい findList を作成しました。

http://cflib.org/index.cfm?event=page.udfbyid&udfid=1908

これは完璧ではありませんし、可能な限り最適でもありませんが、有用な最初のステップになるか、アイデアが得られる可能性があります。とはいえ、それは私のニーズに合っていました (特定のブログ コメントがブラックリストに登録された単語のいずれかを参照しているかどうかを判断します)。URL のリストを比較して示していますが、任意の単語である可能性があります。それが少し役立つことを願っています。

于 2012-07-01T01:01:00.747 に答える
0

検討する価値のあるもう 1 つのオプションは、現在 CF に同梱されている Solr エンジンを活用することです。文字列検索の面倒な作業を代行してくれるので、コレクションを動的に最新の状態に保ち、新しいフィード アイテムが入ってくるたびに最適化することに集中できます。

幸運を!

于 2012-07-01T02:23:49.693 に答える