2

私は、任意のドキュメント (.txt) 内の一意の単語とその数を見つけるという課題を与えられました。辞書も与えられており、文書内の単語が辞書にある場合は有効です。課題は、接続されたデータベースで mysql コマンド ラインを使用してこの問題を解決することです。シェルスクリプトもプログラミングもありません。mysql コマンドだけです。

辞書用のテーブルを作成し、dictionary.txt ファイルから単語をロードするとLOAD DATA INFILE 'dictionary.txt' REPLACE INTO TABLE 'words' (word);、レコードごとに 1 単語というようにうまく機能しました。しかし、文書ファイルには実際の区切り文字はありません...行ごとに読むことはできますが、正規表現を使用して各行の単語と辞書の単語を比較するにはどうすればよいでしょうか? mysql は、フィールド内の一致する単語だけではなく、フィールドの内容全体を返しませんか?

どんな助けでも素晴らしいでしょう。

編集: SQLFiddle は現在ダウンしているようです。これまでに行ったことは次のとおりです。

CREATE TABLE dictionary (word VARCHAR(50) NOT NULL UNIQUE, freq INT DEFAULT 0);

LOAD DATA INFILE 'dictionary.txt' REPLACE INTO TABLE dictionary (word);

SELECT * FROM dictionary;収量:

+------------------------------+------+
| word                         | freq |
+------------------------------+------+
| a                            |    0 | 
| aa                           |    0 | 
| aaa                          |    0 | 
| aaas                         |    0 | 
| aah                          |    0 | 
| aal                          |    0 | 
| aalii                        |    0 | 
| aam                          |    0 | 
| aani                         |    0 | 
| aardvark                     |    0 | 
| aardvarks                    |    0 | 
| aardwolf                     |    0 | 
| aardwolves                   |    0 | 
| aargh                        |    0 | 
| aarhus                       |    0 | 
| aaron                        |    0 | 
.
.
.
.
| zymotize                     |    0 | 
| zymotoxic                    |    0 | 
| zymurgy                      |    0 | 
| zyrenian                     |    0 | 
| zyrian                       |    0 | 
| zyryan                       |    0 | 
| zythem                       |    0 | 
| zythia                       |    0 | 
| zythum                       |    0 | 
| zyzomys                      |    0 | 
| zyzzogeton                   |    0 | 
+------------------------------+------+
300248 rows in set (0.29 sec)

dictionary.txt ファイルは、1 行に 1 語だけです。(おそらく、ここでは頻度カウントを含める必要はありません)。

次に、そこから、 http://www.usconstitution.net/const.txtなどの任意のテキスト ドキュメントを取得し、それを mysql テーブル 'document' に読み込んで、次のような検索を実行できるようにします。 ' document.word が Dictionary.word にある場合に、document.word 内の一意の単語をすべて検索します。それぞれの一意の単語とそのカウントを返します。

でファイルを読み込もうとしましたLOAD DATA INFILE 'const.txt' REPLACE INTO TABLE document LINES TERMINATED BY ' ' (word);が、区切り文字はスペースだけでなく空白にする必要があります。たとえば、const.txt の各行は で終了し\n、各行の最後の単語は word\nanotherword としてテーブルに配置されます。句読点で終わる単語 (word. word, word; word-- word" など) については今のところ心配していないので、表に句読点が付いていても問題ありません。

例:SELECT * FROM DOCUMENT WHERE word REGEXP '\n';利回り:

| http://www.gutenberg.net

This              | 
| Gutenberg-tm,
including                     | 
| Literary
Archive                            | 
| to
subscribe                                | 
| eBooks.
                                    | 
+---------------------------------------------+
3356 rows in set (0.00 sec)

LINES TERMINATED BY ''句に正規表現区切り文字を使用する方法はありますか? \s理想的には、空白 ( \t\nなど) を使用してhttp://www.gutenberg.netThisGutenberg-tm,includingLiteraryArchive、がすべて個別のレコードtoになるようにしたいと考えています。subscribeeBooks.

4

1 に答える 1