2016-09-21 15 views
1

をトークン化私は以下のように連結した単語を含む文字列のセットを持って:私はグーグルにこれらの用語を入力するとは、連結文字列

longstring (two English words) 
googlecloud (a name and an English word) 

、それはとの言葉を認識し、「もしかして?」 (「長い文字列」、「googleクラウド」)。私は自分のアプリケーションに似た機能が必要です。

私はPythonとElasticSearchのオプションを調べました。私が見つけたすべてのトークン化の例は、空白、大文字、特殊文字などに基づいています。

文字列は英語で提供されていますが、名前は含まれていますか?それは特定の技術にある必要はありません。

Google BigQueryでこれを行うことはできますか?

答えて

1

独自の実装もロールできますか?私はこのようなアルゴリズムを考えています:

  1. あなたは
  2. クイック検索(私はtrieを考えています)
  3. を検索してみてください可能なデータ構造を構築する区別したいすべての単語と辞書を取得します。最初の単語(1文字から始まり、単語が見つかるまでそれを増やす)。見つかった場合は、残りの文字列を使用し、何も残らなくなるまで同じことを行います。見つからない場合は、前の単語をバックトラックして拡張します。

文字列を分割できる場合はok-ishにする必要がありますが、ぎこちない場合はすべての可能性を試してください。もちろん、あなたの辞書がどんなに大きくなるかによって異なります。しかし、これはちょっと考えただけで、おそらく助けになるかもしれません。

1

あなたはBigQueryのでこれを解決することを選択しなければ、次の候補解である:wordsという表にすべての可能な英語の単語の

  1. ロードリスト。たとえば、https://github.com/dwyl/english-wordsには〜350,000語のリストがあります。インターネット上で自由に利用できる他のデータセット(WordNet)もあります。英語の単語の

    Row first second 
    1 long string 
    2 google cloud 
    

    でも非常に大きなリスト:それが生成するこの例では

SELECT first, second FROM ( SELECT word AS first, SUBSTR(candidate, LENGTH(word) + 1) AS second FROM dataset.words CROSS JOIN ( SELECT candidate FROM UNNEST(["longstring", "googlecloud", "helloxiuhiewuh"]) candidate) WHERE STARTS_WITH(candidate, word)) WHERE second IN (SELECT word FROM dataset.words)

:標準SQLを使用して

  • は、候補者のリスト上で次のクエリを実行します。 MBのカップルだけになるので、このクエリのコストは最小です。最初の1TBスキャンは無料です.2MBのテーブルで約500,000回のスキャンが可能です。その後、それぞれの追加スキャンは0.001セントになります。