2012-03-26 4 views
1

私は現在、テキスト情報を照会するサイトを開発しようとしています。私はすでに必要なすべてのテキストファイルを持っていますが、私はデータベースに全く触れておらず、どこから始めるべきか分かりません。テキストファイルのデータベースへの変換はどこから始まりますか?

私はテキストファイルを解析してデータベースに挿入する必要があると知っていますが、オンラインで見つかった情報のほとんどは、ある種のSQLサーバーをオンラインにすることを指しています。どのようにテキストファイルを解析してデータベースに挿入すればいいのでしょうか?その代わりに、それらをウェブサイトに移植しますか?私は完全に失われています):

私はJavaとPythonで多少経験があり、CSS/HTMLに精通しています。

+1

テキストファイルに構造化データがありますかどうか –

+0

まず、データベースを作成し、テーブルを作成し、値を挿入することを心配する前にそれらを整理する必要があります。 –

答えて

0

これは大きな仕事(多くのデータ)ですか、それとも初めてですか?

Jasper/Talend ETL考えるが、私はそれはやり過ぎだと思いますあなたは本当にたくさんの操作を持っている場合LOAD DATA INFILEかを行うには、あなたのファイルを操作考えるご覧ください。


あなたのコメントを読んだ後、私はいくつかのスクリプトを作成しました。 mysqlクライアントを持つまたは作業台

CREATE DATABASE IF NOT EXISTS `test`; 
USE test; 

ログインは、私はすべてのことをテストしていませんが、うまくいけば、それはであなたを指すこれら

DROP TABLE IF EXISTS `test`.`tempjop`; 
CREATE TABLE `test`.`tempjop` (
    `fullname` VARCHAR(45) NOT NULL, 
    `description` TEXT NOT NULL 
); 

-- Example 
-- INSERT INTO `test`.`tempjop` (`fullname`, `description`) VALUES ("JOHN DOE", "John is a programmer"); 


LOAD DATA INFILE 'C:/Temp/Job.txt' INTO TABLE tempjop 
    FIELDS 
     TERMINATED BY ':' OPTIONALLY ENCLOSED BY '"' 
    LINES 
     TERMINATED BY '\r\n'; 

SELECT 
    * 
FROM 
    `tempjop` 
; 

UPDATE 
    `user` AS U, 
    `tempjop` AS J 
SET 
    U.jobdescription = J.description 
WHERE 
    J.fullname = CONCAT(CONCAT(U.firstname, ' '), U.lastname) 
    -- If you need first names only like 'MARY' uncomment this 
    -- OR J.fullname = U.firstname; 
; 

SELECT * FROM `user`; 

DROP TABLE IF EXISTS `tempjop`; 

そして、これら

DROP TABLE IF EXISTS `test`.`user`; 
CREATE TABLE `test`.`user` (
    `userid` INT NOT NULL AUTO_INCREMENT , 
    `firstname` VARCHAR(45) NOT NULL , 
    `lastname` VARCHAR(45) NOT NULL , 
    `jobdescription` TEXT NULL, 
    `childhooddescription` TEXT NULL, 
    PRIMARY KEY (`userid`) 
); 


DROP TABLE IF EXISTS `test`.`tempuser`; 
CREATE TABLE `test`.`tempuser` (
    `fullname` VARCHAR(90) NOT NULL, 
    PRIMARY KEY (`fullname`) 
); 

-- Examples you can use 
-- INSERT INTO `test`.`user` (`firstname`,`lastname`) VALUES ("bob","jones"); 
-- INSERT INTO `test`.`tempuser` (`fullname`) VALUES ("JOHN DOE"); 

INSERT INTO `test`.`user`(
    `firstname`, 
    `lastname` 
) 
SELECT 
    SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 1), ' ', -1) AS firstname, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 2), ' ', -1) AS lastname 
FROM 
    tempuser; 


SELECT * FROM `user`; 

DROP TABLE IF EXISTS `tempuser`; 

をお試しください右方向。

幸運。

+0

データのサイズは比較的小さいです。基本的には、キーを含むテキストファイル(John Doe)と、キーの特定の部分を文書化したテキストファイル(つまり、みんなの仕事+キーのファイル、みんなの子供時代+キーのファイルなど) 。私は、これらのテキストファイルをすべて本質的に1つのテーブルにまとめ、段落のキーまたは個々の単語で検索する仕組みを持っています。 – zhuyxn

+0

更新された提案を試しましたか? – KCD

0

MySQLのfull-text searchがまず試してみてください。あなたが必要とするものに十分に十分かもしれません。おそらく必要なものは、this exampleをテンプレートとして使用してください。

要するに、ファイルをまったく解析しないことがあります。ドキュメントのタイトルとドキュメントの本文を特定し、それらを2つの別々のフィールドとしてテーブル行に挿入します。書式設定やその他のメタコンテンツがある場合は、挿入前にそれらを削除してください。

+0

申し訳ありませんが、私はデータベースを初めて使い慣れていますが、フルテキスト検索の使い方については少し混乱しています。私が持っているテキストファイルはキーで編成されており(John Doe)、各テキストファイルにはJohn Doeのテキストの短い段落が含まれています。これらのテキストファイルをどのようにして1つのテーブルにまとめるかについて少し詳しく説明できますか?たぶんデータベースについてもっと学ぶ必要があるかもしれません。 – zhuyxn

+0

@zhuyxn:スプレッドシートを考える:1枚のシートが1つの「データベーステーブル」です。スプレッドシートの行はd/b行に対応します。列は単一のフィールドを参照します。データベースクエリは行基準に一致し、表示する特定のフィールドを選択します。簡単です。列Aには「キー」を、列Bにはテキストを置きます。フルテキストは、Google検索で慣れ親しんでいるもので、重要な単語をドキュメント固有のものとして識別します。私が与えた例は、ドキュメントごとに複数のキーが存在する場合を除いて、あなたの使用に完全に一致しています。 – wallyk

+0

ああ、感謝します、ありがとう!私はまだすべてを一緒にリンクさせる方法についてちょっと混乱しています。一度データベースとテーブルを取得したら、検索可能なWebページに変換するヒントを教えてください。 – zhuyxn

関連する問題