Создать таблицу MySQL из списка терминов в текстовом файле - PullRequest
1 голос
/ 13 марта 2009

У меня есть текстовый файл с длинным списком терминов (около 800), отсортированных по алфавиту в формате:

aword
bword
cword
...

Я хотел бы использовать этот файл для создания новой таблицы MySQL, где каждый термин является полем, все со свойством VARCHAR (5).

Было бы лучше, если бы поля были вставлены в том порядке, в котором они появляются в файле, поскольку я также использую этот файл в сценариях для анализа содержимого, и было бы проще, если бы (алфавитный) порядок сохранялся, когда пришло время вставить данные в эту новую таблицу.

Для тех, кому интересно, я студент, делаю дипломный проект по истории науки, который включает контент-анализ. Поля будут использоваться для хранения частотных данных. Будет другое поле, которое будет первичным ключом и связывает эти поля с другими данными. Я не программист, но у меня есть 10-летний опыт работы с Linux, и я обычно могу разобраться. Тем не менее, Google подвел меня здесь.

EDIT

Итак, Дамовизо указал, что мне действительно нужно было превратить файл в команду mySQL. Я использовал awk и uniq для генерации следующего:

CREATE TABLE keyterms_frq (
    filename VARCHAR(20),
    apperception VARCHAR(5),
    behaviorism VARCHAR(5),
    behavioristic VARCHAR(5),
    behaviorists VARCHAR(5),
    behaviorist VARCHAR(5),
    behavior VARCHAR(5),
    behaviour VARCHAR(5),
    brain VARCHAR(5),
    conditioned VARCHAR(5),
    conditioning VARCHAR(5),
    condition VARCHAR(5),
    consciousness VARCHAR(5),
    conscious VARCHAR(5),
    experienced VARCHAR(5),
    experiences VARCHAR(5),
    experience VARCHAR(5),
    intellect VARCHAR(5),
    introspections VARCHAR(5),
    introspection VARCHAR(5),
    introspectively VARCHAR(5),
    introspective VARCHAR(5),
    intuition VARCHAR(5),
    memoryimage VARCHAR(5),
    memory VARCHAR(5),
    mentality VARCHAR(5),
    mentally VARCHAR(5),
    mental VARCHAR(5),
    mind VARCHAR(5),
    mirrorscript VARCHAR(5),
    mirrorwriting VARCHAR(5),
    unconditioned VARCHAR(5)
);  

Что, к сожалению, все еще не работает, так как генерирует следующее:

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом со «условием VARCHAR (5), сознательным VARCHAR (5), сознательным VARCHAR (5), опытом» в строке 1

Сначала я думал, что существует ограничение на количество полей, которые я могу генерировать, но это не проблема

Ответы [ 5 ]

2 голосов
/ 14 марта 2009

Привет, Фрэнк, я только что написал это на твоей странице в фейсбуке, но здесь снова:

«условие» - это зарезервированное слово в MySQL, поэтому вы не можете называть этот столбец ни одним столбцом. Проверьте список здесь (для MySQL 5.1 по крайней мере):

http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

1 голос
/ 13 марта 2009

Итак, я думаю, вы просите вот что: Прочитайте файл в программу.
программа должна взять каждую строку и сгенерировать строку, содержащую все слова.
объедините оператор CREATE TABLE со строкой, содержащей имена полей, для создания оператора SQL.
отправить эту команду SQL на ваш сервер sql.
Я все еще слишком нов в этом, чтобы дать вам хорошую реализацию этой идеи, но, надеюсь, если она будет соответствовать тому, что вы ищете, я дам кому-то идею.

1 голос
/ 13 марта 2009

Лично (и я знаю, что это, вероятно, не будет популярно), но я склонен использовать Excel и что-то вроде Textpad или Notepad ++ (или даже vanilla Notepad) для разовых вставок в базу данных и создания таблиц, подобных этому.

Импортируйте текстовый файл, чтобы каждое слово помещалось в новую строку, сортируйте их по мере необходимости и строите вокруг него SQL-команду, вставляя столбцы и строки сверху и снизу.

В этом случае я бы предложил:

  1. Вставить строку сверху со следующим содержимым в ячейку A1:
    CREATE TABLE MyTable (Id INT NOT NULL AUTO _ INCREMENT PRIMARY KEY,
  2. В каждой ячейке столбца B рядом со словом поместите следующее содержимое:
    VARCHAR(5),
  3. Удалите запятую для последней и поместите «);» в ячейку ниже.
  4. Сохраните как файл с разделителями табуляции, затем, используя выбранный вами текстовый редактор, замените табуляции пробелами.

У вас останется файл SQL, который вы можете запустить с базой данных.

Да, это грязно и не очень 1337, но это эффективно.

0 голосов
/ 02 декабря 2010

Это работает путем загрузки файла в базу данных с помощью «загрузить данные infile». Замените все переменные с префиксом на x

mysql -uxuser -pxpass xdatabase -e "LOAD DATA INFILE '/tmp/xwordlist.cvs' INTO TABLE xtable FIELDS TERMINATED BY ',' (xcolname)"
0 голосов
/ 13 марта 2009

Я не уверен, что полностью понимаю ваш вопрос, но у меня есть мысль:

Если вы собираетесь вычислять данные частоты, вы могли бы написать более эффективные алгоритмы анализа контента, если слова были отсортированы до того, как они были вставлены в таблицу. Это уменьшит нагрузку на процессор на сервере базы данных, и ваш частотный калькулятор также будет более эффективным.

Может быть, вы могли бы немного подробнее рассказать нам о своем вопросе?

...