2012-03-26 79 views
1

我目前正在嘗試開發一個查詢文本信息的站點。我已經擁有了我需要的所有文本文件,但我對數據庫完全陌生,並且不知道從哪裏開始。從哪裏開始將文本文件轉換爲數據庫?

我知道我需要解析文本文件並將它們插入到數據庫中,但我在網上找到的大多數信息都指向了某種SQL服務器在線。我將如何解析文本文件並將它們插入到數據庫中,並作爲回報,將它們移植到網站上?一個地方開始會很棒,我完全失去了):

我在Java和Python方面有點經驗,熟悉CSS/HTML。

+1

您是否擁有文本文件中的結構化數據? – 2012-03-26 05:52:02

+0

您需要首先創建您的數據庫,製作表格並組織它們,然後再擔心插入值。 – 2012-03-26 05:56:56

回答

0

這是一個很大的工作(很多數據)還是你剛剛接觸它?

如果你有大量的數據的考慮操縱您的文件做一個LOAD DATA INFILE或者,如果你真的有很多的操作考慮Jasper/Talend ETL,但我猜是矯枉過正。


看完你的意見後,我已經草擬了一些腳本。

登錄使用MySQL客戶端或工作臺

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

嘗試這些

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`; 

那麼這些

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`; 

我沒有測試所有的,但希望它指向您在正確的方向。

祝你好運。

+0

數據的大小相對較小。從本質上講,我有幾個包含關鍵字的文本文件(即John Doe),以及包含段落的文本文件,這些段落記錄了關鍵的特定部分(即每個人的工作+關鍵文件,每個人的童年+關鍵文件等) 。我想將所有這些文本文件合併到一個表格中,並且有一種機制可以通過鍵或單個段落中的單詞進行搜索。 – zhuyxn 2012-03-26 06:37:23

+0

你有沒有嘗試任何更新的建議? – KCD 2012-03-28 01:44:21

0

MySQL的full-text search是第一次嘗試。它可能足夠滿足你所需要的。使用this example作爲您可能需要的模板。

簡而言之,你可能根本就不解析文件。只需標識文檔標題和文檔正文,然後將其作爲兩個單獨的字段插入到表格行中即可。如果有格式化或其他元內容,可能會在插入之前將其刪除。

+0

對不起,我對數據庫很陌生,但我對如何使用全文搜索有點困惑。我擁有的文本文件是按鍵組織的(即John Doe),每個文本文件都包含John Doe上的一段短文。你能詳細談談我如何將所有這些文本文件合併到一個表中嗎?也許我只需要先了解更多關於數據庫的知識。 – zhuyxn 2012-03-26 06:34:05

+0

@zhuyxn:想象一個電子表格:一張表是一個「數據庫表」。電子表格行對應於一個d/b行。一列是指單個字段。數據庫查詢匹配行標準並選擇要顯示的特定字段。簡單。在A列中放置「鍵」,在B列中放置文本。全文是您習慣使用Google搜索的地方,它將重要單詞標識爲文檔更獨特。我給出的示例與您的使用完全相符 - 除非每個文檔有多個關鍵字。 – wallyk 2012-03-26 06:38:29

+0

哦,這很有道理,謝謝!我仍然對如何將所有東西鏈接在一起感到困惑。一旦我得到了一個數據庫/表格,有關如何將其轉換爲可搜索網頁的任何提示? – zhuyxn 2012-03-26 07:14:57