ホームページ >バックエンド開発 >Golang >Gin フレームワークを使用してテキスト分析とセンチメント分析機能を実装する

Gin フレームワークを使用してテキスト分析とセンチメント分析機能を実装する

王林
王林オリジナル
2023-06-23 11:47:591307ブラウズ

近年、ソーシャル メディアの普及とモバイル インターネットの発展に伴い、オンライン プラットフォーム上で人々が共有および公開する記事やコメントの数が爆発的に増加しており、これらのテキストにはさまざまなトピックが網羅されているだけでなく、豊富なコンテンツが含まれています。 . 感情的な色。

企業や個人にとって、自社のブランド、製品、サービスに対する大衆の態度や感情を理解することは非常に重要です。したがって、テキスト分析機能と感情分析機能を実装する必要性が高まっています。この記事では、Gin フレームワークを使用してテキスト分析とセンチメント分析機能を実装する方法を紹介します。

1. Gin フレームワークの概要

Gin フレームワークは Go 言語で書かれた Web フレームワークであり、効率的なメモリ再利用により高パフォーマンスの API サービスを実装します。 Gin は Martini フレームワークの考え方に基づいて設計されていますが、より優れたパフォーマンスと優れた API を備えており、中小規模の Web アプリケーションの構築に使用でき、RESTful API サービスの構築にも非常に適しています。

2. Gin フレームワークをインストールする

始める前に、Gin フレームワークと関連する依存ライブラリをインストールする必要があります。インストールする前に、Golang 開発環境をインストールする必要があります。ターミナルに次のコマンドを入力して、Gin フレームワークをインストールします:

go get -u github.com/gin-gonic/gin

さらに、次の 2 つの依存ライブラリもインストールする必要があります:

go get -u gopkg.in/yaml.v2
go get -u github.com/cdipaolo/sentiment

3. テキスト分析関数を実装します

感情分析を実装する前に、いくつかの基本的なテキスト分析関数を実装する必要があります。

  1. 単語の分割

テキストの一部を個々の単語に分割する必要があります。このプロセスは単語の分割と呼ばれます。 Go 言語では、サードパーティ ライブラリ github.com/blevesearch/go-porterstemmer を使用してこの関数を実装できます。以下は簡単なコード例です:

import (
    "github.com/blevesearch/go-porterstemmer"
    "strings"
)

func Tokenize(text string) []string {
    // Remove unnecessary characters
    text = strings.ReplaceAll(text, ".", "")
    text = strings.ReplaceAll(text, ",", "")
    text = strings.ReplaceAll(text, "!", "")
    text = strings.ReplaceAll(text, "?", "")
    text = strings.ToLower(text)

    // Split text into words
    words := strings.Fields(text)

    // Stem words using Porter Stemmer algorithm
    for i, w := range words {
        words[i] = porterstemmer.Stem(w)
    }

    return words
}
  1. 単語の頻度を数える

単語の分割後、テキスト内に各単語が出現する回数をカウントする必要があります。このプロセスは統計と呼ばれます 単語頻度。以下は簡単なコード例です:

func CalculateTermFrequency(words []string) map[string]int {
    frequency := make(map[string]int)

    for _, w := range words {
        _, exists := frequency[w]
        if exists {
            frequency[w]++
        } else {
            frequency[w] = 1
        }
    }

    return frequency
}

4. 感情分析関数の実装

感情分析関数を実装する前に、感情的な単語を保存するための感情辞書を確立する必要があります。感情の重み。ここでは、感情辞書ファイル AFINN-165.txt を使用します。以下はファイルの一部です:

abandons    -2
abducted    -2
abduction    -2
abductions    -2
abhor    -3
abhorred    -3
abhorrent    -3
abhorring    -3
abhors    -3
abilities    2
...

次のコードを使用してセンチメント ディクショナリ ファイルを読み取り、マップに保存できます:

import (
    "bufio"
    "os"
    "strconv"
    "strings"
)

func LoadSentimentWords(filename string) (map[string]int, error) {
    f, err := os.Open(filename)
    if err != nil {
        return nil, err
    }
    defer f.Close()

    sentiments := make(map[string]int)

    scanner := bufio.NewScanner(f)
    for scanner.Scan() {
        splitted := strings.Split(scanner.Text(), "    ")
        word := splitted[0]
        value, err := strconv.Atoi(splitted[1])
        if err != nil {
            continue
        }
        sentiments[word] = value
    }

    return sentiments, nil
}

センチメント ディクショナリ ファイルを読み取った後、次のことができます。次のコードを使用して、テキストのセンチメント スコアを計算します。

import (
    "github.com/cdipaolo/sentiment"
    "github.com/ryangxx/go-sentiment-analysis/text"
)

func CalculateSentimentScore(text string, sentiments map[string]int) (float64, error) {
    words := text.Tokenize(text)
    wordCount := len(words)

    score := 0
    for _, w := range words {
        value, exists := sentiments[w]
        if exists {
            score += value
        }
    }

    return float64(score) / float64(wordCount), nil
}

上記のコードは、サードパーティ ライブラリ github.com/cdipaolo/sentiment を使用してセンチメント分析を実行します。このライブラリは、NLTK ベースの Python ライブラリ VADER の Go 言語実装であり、テキストのセンチメント スコアを直接計算できます。

5. API サービスの構築

テキスト分析機能とセンチメント分析機能の実装に成功しました。次に、これらの関数を RESTful API サービスに統合する必要があります。

以下はディレクトリ構造です:

- main.go
- config/
  - config.yaml
- internal/
  - analyzer/
    - analyzer.go
  - handler/
    - handler.go
  - model/
    - sentiment.go

config/config.yaml ファイルは、感情語彙ライブラリのファイル パスなどの構成情報を保存するために使用されます。以下は設定ファイルのサンプルです。

analyzer:
  sentimentFile: "data/AFINN-165.txt"
  tokenizing:
    remove:
      - "."
      - ","
      - "!"
      - "?"
    toLowercase: true

analyzer/analyzer.go ファイルはメインの分析プログラムです。単語の分割とセンチメントの計算のためのすべての関数が含まれています。 handler/handler.go ファイルには API ハンドラーが含まれています。最後に、model/sentiment.go ファイルに Sentiment 構造体を API 応答の戻り値の型として定義しました。

以下はメイン コードです:

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/ryangxx/go-sentiment-analysis/analyzer"
    "github.com/ryangxx/go-sentiment-analysis/handler"
)

func main() {
    router := gin.Default()

    sentimentAnalyzer := analyzer.NewSentimentAnalyzer()
    sentimentHandler := handler.NewSentimentHandler(sentimentAnalyzer)

    router.GET("/analysis", sentimentHandler.GetSentimentAnalysis)

    router.Run(":8080")
}

6. API テスト

これで、API サービスが完成しました。これをテストするには、curl コマンドまたは postman を使用します。

次は、curl コマンドの例です:

curl --location --request GET 'http://localhost:8080/analysis?text=I%20love%20Golang'

この API は、JSON オブジェクトを返します:

{
    "message": "OK",
    "sentiment": {
        "score": 0.6
    }
}

この JSON オブジェクトでは、スコアはセンチメント スコアです。その値の範囲は -1 から 1 で、-1 は完全に負、0 は中立、1 は完全に正です。

7. 結論

この記事では、Gin フレームワークを使用してテキスト分析とセンチメント分析のための API サービスを構築する方法を紹介しました。私たちは、Go 言語を使用してセンチメント ボキャブラリーを読み取り、テキストのセンチメント スコアを計算できるセンチメント アナライザーを開発しました。また、Gin フレームワークを使用して、このセンチメント アナライザーを RESTful API サービスに構築する方法も示します。

この記事では AFINN-165.txt 感情ディクショナリを使用していますが、これが唯一のオプションではないことを指摘しておきます。現実の世界では、選択できる感情辞書が複数あり、それぞれに長所と短所があります。したがって、実際のアプリケーションでは、ニーズに最も適した感情辞書を選択する必要があります。

一般に、Gin フレームワークに基づいて構築されたテキスト分析およびセンチメント分析 API サービスは非常に効果的かつ実用的であり、当社のブランド、製品、サービスに対する一般の人々の態度や感情をより深く理解するのに役立ちます。

以上がGin フレームワークを使用してテキスト分析とセンチメント分析機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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