ホームページ >データベース >mysql チュートリアル >MySQL データベースをテキスト分析に使用するにはどうすればよいですか?

MySQL データベースをテキスト分析に使用するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-07-12 12:43:39971ブラウズ

MySQL データベースをテキスト分析に使用するにはどうすればよいですか?

ビッグデータ時代の到来により、テキスト分析は非常に重要なテクノロジーになりました。人気のリレーショナル データベースである MySQL は、テキスト分析にも使用できます。この記事では、MySQL データベースをテキスト分析に使用する方法と、対応するコード例を紹介します。

  1. データベースとテーブルの作成

まず、テキスト データを保存するための MySQL データベースとテーブルを作成する必要があります。次の SQL ステートメントを使用して、「analysis」という名前のデータベースと「text_data」という名前のテーブルを作成できます。

CREATE DATABASE analysis;
USE analysis;
CREATE TABLE text_data (
    id INT PRIMARY KEY AUTO_INCREMENT,
    content TEXT
);
  1. テキスト データのインポート

次のステップでは、分析するテキスト データを MySQL データベースにインポートします。これは、LOAD DATA INFILE ステートメントまたは INSERT INTO ステートメントを使用して実現できます。

テキスト データが CSV ファイルに保存されている場合は、次の SQL ステートメントを使用してデータをインポートできます。

LOAD DATA INFILE 'path/to/text_data.csv'
INTO TABLE text_data
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '
'
IGNORE 1 ROWS;

テキスト データが他の種類のファイルに保存されている場合は、対応するメソッドを使用してデータをインポートできます。メモリに読み取り、INSERT INTO ステートメントを使用してデータをテーブルに挿入します。

  1. テキスト分析

データを MySQL データベースにインポートしたら、SQL ステートメントを使用してテキスト分析を行うことができます。以下に、一般的に使用されるテキスト分析操作とそれに対応する SQL ステートメントの例を示します。

  • テキスト数のカウント:
SELECT COUNT(*) FROM text_data;
  • 単語数のカウント:
SELECT SUM(LENGTH(content) - LENGTH(REPLACE(content, ' ', '')) + 1) FROM text_data;
  • 特定のキーワードを含むテキストを検索:
SELECT * FROM text_data WHERE content LIKE '%keyword%';
  • 最も頻繁に出現する単語を検索:
SELECT word, COUNT(*) AS count FROM (
    SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(content, ' ', n), ' ', -1) AS word
    FROM text_data
    JOIN (
        SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
    ) AS numbers
    ON CHAR_LENGTH(content) - CHAR_LENGTH(REPLACE(content, ' ', '')) >= n - 1
) AS words
GROUP BY word
ORDER BY count DESC
LIMIT 10;
  • 最も一般的な 2 つの単語の組み合わせを検索します:
SELECT CONCAT(word1, ' ', word2) AS phrase, COUNT(*) AS count FROM (
    SELECT DISTINCT
        SUBSTRING_INDEX(SUBSTRING_INDEX(content, ' ', n1), ' ', -1) AS word1,
        SUBSTRING_INDEX(SUBSTRING_INDEX(content, ' ', n2), ' ', -1) AS word2
    FROM text_data
    JOIN (
        SELECT a.n + b.n * 10 AS n1, a.n + b.n * 10 + 1 AS n2
        FROM (
            SELECT 1 AS n
            UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
            UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
        ) AS a
        CROSS JOIN (
            SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
        ) AS b
    ) AS numbers
    ON CHAR_LENGTH(content) - CHAR_LENGTH(REPLACE(content, ' ', '')) >= n2 - 1
) AS phrases
GROUP BY phrase
ORDER BY count DESC
LIMIT 10;
  1. 結果の表示と視覚化

最後に、MySQL の結果セットと他の視覚化ツール (たとえば、 Python Matplotlib、Tableau など) を使用して分析結果を表示します。

たとえば、次の Python コードを使用すると、Matplotlib を使用して各単語の出現頻度を示すヒストグラムを生成できます:

import matplotlib.pyplot as plt
import mysql.connector

cnx = mysql.connector.connect(user='your_username', password='your_password',
                              host='localhost',
                              database='analysis')
cursor = cnx.cursor()

query = ("SELECT word, COUNT(*) AS count FROM ("
         "SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(content, ' ', n), ' ', -1) AS word "
         "FROM text_data "
         "JOIN ("
         "SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4"
         ") AS numbers "
         "ON CHAR_LENGTH(content) - CHAR_LENGTH(REPLACE(content, ' ', '')) >= n - 1"
         ") AS words "
         "GROUP BY word "
         "ORDER BY count DESC "
         "LIMIT 10")

cursor.execute(query)

words = []
counts = []

for (word, count) in cursor:
    words.append(word)
    counts.append(count)

plt.bar(words, counts)
plt.xlabel('Word')
plt.ylabel('Count')
plt.title('Frequency of Top 10 Words')
plt.xticks(rotation=45)
plt.show()

cursor.close()
cnx.close()

上記は、テキストの基本的な手順とサンプル コードです。 MySQL データベースを使用した分析。実際のプロジェクトでのテキスト分析作業に役立つことを願っています。

以上がMySQL データベースをテキスト分析に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。