>백엔드 개발 >Golang >Gin 프레임워크를 사용하여 텍스트 분석 및 감정 분석 기능 구현

Gin 프레임워크를 사용하여 텍스트 분석 및 감정 분석 기능 구현

王林
王林원래의
2023-06-23 11:47:591305검색

최근에는 소셜 미디어의 인기와 모바일 인터넷의 발달로 인해 온라인 플랫폼에서 사람들이 공유하고 게시하는 글과 댓글의 수가 폭발적으로 증가하고 있습니다. 이러한 텍스트는 다양한 주제를 다룰 뿐만 아니라 풍부한 감성적 색채를 담고 있습니다. .

기업과 개인이 브랜드, 제품, 서비스에 대한 대중의 태도와 감정을 이해하는 것은 매우 중요합니다. 따라서 텍스트 분석 및 감정 분석 기능을 구현해야 할 필요성이 점점 더 커지고 있습니다. 이번 글에서는 Gin 프레임워크를 사용하여 텍스트 분석과 감성 분석 기능을 구현하는 방법을 소개하겠습니다.

1. Gin 프레임워크 소개

Gin 프레임워크는 Go 언어로 작성된 웹 프레임워크로 효율적인 메모리 재사용을 통해 고성능 API 서비스를 구현합니다. Gin은 Martini 프레임워크의 아이디어를 기반으로 설계되었지만 더 나은 성능과 더 나은 API를 갖추고 있으며 중소 규모의 웹 애플리케이션을 구축하는 데에도 사용할 수 있습니다. RESTful API 서비스 구축에도 매우 적합합니다.

2. Gin 프레임워크 설치

시작하기 전에 Gin 프레임워크와 관련 종속 라이브러리를 설치해야 합니다. 설치하기 전에 Golang 개발 환경을 설치해야 합니다. Gin 프레임워크를 설치하려면 터미널에 다음 명령을 입력하세요.

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

또한 다음 두 가지 종속 라이브러리도 설치해야 합니다.

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 핸들러가 포함되어 있습니다. 마지막으로 API 응답의 반환 유형으로 model/sentiment.go 파일에 Sentiment 구조를 정의했습니다.

다음은 주요 코드입니다.

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 --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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.