我的任务是在任意文档 (.txt) 中查找唯一单词及其计数。我也得到了一本字典,如果它在字典中,文档中的单词是有效的。任务是使用带有附加数据库的 mysql 命令行来解决这个问题。没有 shell 脚本,没有编程。只是mysql命令。
我为字典创建了一个表,并将 dictionary.txt 文件中的单词加载到其中LOAD DATA INFILE 'dictionary.txt' REPLACE INTO TABLE 'words' (word);
,它工作得很好:每条记录一个单词。但是在文档文件中,没有真正的分隔符......我可以逐行读取它,但是如何使用正则表达式将每行中的单词与字典中的单词进行比较?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 文件每行只有一个单词。(也许这里不需要包含频率计数)。
然后从那里,我想获取一个任意文本文档,比如http://www.usconstitution.net/const.txt,并将其读入 mysql 表“文档”,以便我可以执行搜索以达到以下效果'在 document.word 中查找 document.word 在 dictionary.word 中的所有唯一词。返回每个唯一的单词及其计数'。
我试图读取文件,LOAD DATA INFILE 'const.txt' REPLACE INTO TABLE document LINES TERMINATED BY ' ' (word);
但我需要分隔符是任何空格,而不仅仅是空格。例如,const.txt 中的每一行都以 结尾,每行\n
的最后一个单词作为 word\nanotherword 放入表中。我现在不担心以标点符号结尾的单词(单词。单词,单词;单词--单词”等),所以如果它们出现在附有标点符号的表格中就可以了。
示例: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.net
, This
, Gutenberg-tm,
, including
, Literary
, Archive
, to
,都是单独的记录。subscribe
eBooks.