Gunakan rangka kerja Gin untuk melaksanakan analisis teks dan fungsi analisis sentimen

王林
Lepaskan: 2023-06-23 11:47:59
asal
1232 orang telah melayarinya

Dalam beberapa tahun kebelakangan ini, dengan populariti media sosial dan perkembangan Internet mudah alih, jumlah artikel dan komen yang dikongsi dan diterbitkan oleh orang di platform dalam talian telah meletupkan teks ini bukan sahaja merangkumi pelbagai topik, tetapi juga mengandungi kandungan yang kaya Warna emosi.

Adalah sangat penting bagi perniagaan dan individu untuk memahami sikap dan emosi orang ramai terhadap jenama, produk dan perkhidmatan mereka. Oleh itu, terdapat keperluan yang semakin meningkat untuk melaksanakan analisis teks dan keupayaan analisis sentimen. Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja Gin untuk melaksanakan analisis teks dan fungsi analisis sentimen.

1. Pengenalan kepada rangka kerja Gin

Rangka kerja Gin ialah rangka kerja Web yang ditulis dalam bahasa Go Ia melaksanakan perkhidmatan API berprestasi tinggi dengan menggunakan penggunaan semula memori yang cekap. Gin direka bentuk berdasarkan idea rangka kerja Martini, tetapi ia mempunyai prestasi yang lebih baik dan API yang lebih baik serta boleh digunakan untuk membina aplikasi web bersaiz kecil dan sederhana Ia juga sangat sesuai untuk membina perkhidmatan API RESTful.

2. Pasang rangka kerja Gin

Sebelum bermula, kita perlu memasang rangka kerja Gin dan perpustakaan bergantung yang berkaitan. Sebelum pemasangan, anda perlu memasang persekitaran pembangunan Golang. Masukkan arahan berikut dalam terminal anda untuk memasang rangka kerja Gin:

go get -u github.com/gin-gonic/gin
Salin selepas log masuk

Selain itu, kami juga perlu memasang dua perpustakaan bergantung berikut:

go get -u gopkg.in/yaml.v2
go get -u github.com/cdipaolo/sentiment
Salin selepas log masuk

3. Laksanakan fungsi analisis teks

Sebelum melaksanakan analisis sentimen, kita perlu melaksanakan beberapa fungsi analisis teks asas.

  1. Pembahagian Perkataan

Untuk sekeping teks, kita perlu memecahkannya kepada perkataan individu Proses ini dipanggil pembahagian perkataan. Dalam bahasa Go, kita boleh menggunakan perpustakaan pihak ketiga github.com/blevesearch/go-porterstemmer untuk melaksanakan fungsi ini. Berikut ialah contoh kod mudah:

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
}
Salin selepas log masuk
  1. Kira kekerapan perkataan

Selepas pembahagian perkataan, kita perlu mengira bilangan kali setiap perkataan muncul dalam teks Ini proses dipanggil statistik Kekerapan perkataan. Berikut ialah contoh kod mudah:

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
}
Salin selepas log masuk

IV Melaksanakan fungsi analisis sentimen

Sebelum melaksanakan fungsi analisis sentimen, kita perlu mewujudkan perpustakaan perbendaharaan kata emosi untuk menyimpan perkataan yang berwarna-warni dan berat sentimen mereka. Di sini, kami menggunakan fail kamus sentimen AFINN-165.txt. Berikut ialah sebahagian daripada fail:

abandons    -2
abducted    -2
abduction    -2
abductions    -2
abhor    -3
abhorred    -3
abhorrent    -3
abhorring    -3
abhors    -3
abilities    2
...
Salin selepas log masuk

Kami boleh menggunakan kod berikut untuk membaca fail kamus sentimen dan menyimpannya ke dalam peta:

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
}
Salin selepas log masuk

Selepas membaca fail kamus sentimen, Kami boleh gunakan kod berikut untuk mengira skor sentimen teks:

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
}
Salin selepas log masuk

Kod di atas menggunakan perpustakaan pihak ketiga github.com/cdipaolo/sentiment untuk melaksanakan analisis sentimen. Pustaka ini ialah pelaksanaan bahasa Go bagi perpustakaan Python berasaskan NLTK VADER, yang boleh mengira secara langsung skor sentimen teks.

5. Membina perkhidmatan API

Kami telah berjaya melaksanakan fungsi analisis teks dan analisis sentimen. Sekarang, kita perlu menyepadukan fungsi ini ke dalam perkhidmatan API RESTful.

Berikut ialah struktur direktori kami:

- main.go
- config/
  - config.yaml
- internal/
  - analyzer/
    - analyzer.go
  - handler/
    - handler.go
  - model/
    - sentiment.go
Salin selepas log masuk

Fail config/config.yaml digunakan untuk menyimpan maklumat konfigurasi, seperti laluan fail pustaka perbendaharaan kata emosi. Berikut ialah contoh fail konfigurasi:

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

fail penganalisis/analyzer.go ialah program analisis utama kami. Ia mengandungi semua fungsi untuk pembahagian perkataan dan pengiraan sentimen. Fail handler/handler.go mengandungi pengendali API kami. Akhir sekali, kami mentakrifkan struktur Sentimen dalam fail model/sentiment.go sebagai jenis pulangan respons API.

Berikut ialah kod utama:

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")
}
Salin selepas log masuk

6. Ujian API

Sekarang, kami telah melengkapkan perkhidmatan API kami. Kita boleh menggunakan perintah curl atau posmen untuk mengujinya.

Berikut ialah contoh perintah curl:

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

API ini akan mengembalikan objek JSON:

{
    "message": "OK",
    "sentiment": {
        "score": 0.6
    }
}
Salin selepas log masuk

Dalam objek JSON ini, skor ialah skor sentimen. Nilainya berjulat dari -1 hingga 1, di mana -1 adalah negatif sepenuhnya, 0 adalah neutral, dan 1 adalah positif sepenuhnya.

7. Kesimpulan

Dalam artikel ini, kami memperkenalkan cara menggunakan rangka kerja Gin untuk membina perkhidmatan API untuk analisis teks dan analisis sentimen. Kami membangunkan penganalisis sentimen menggunakan bahasa Go, yang boleh membaca perbendaharaan kata sentimen dan mengira skor sentimen teks. Kami juga menunjukkan cara membina penganalisis sentimen ini menjadi perkhidmatan API RESTful menggunakan rangka kerja Gin.

Perlu dinyatakan bahawa walaupun kami menggunakan kamus sentimen AFINN-165.txt dalam artikel ini, ini bukan satu-satunya pilihan. Dalam dunia nyata, terdapat berbilang kamus sentimen untuk dipilih, setiap satunya mempunyai kelebihan dan kekurangannya. Oleh itu, dalam aplikasi praktikal, kita perlu memilih kamus sentimen yang paling sesuai dengan keperluan kita.

Secara amnya, perkhidmatan API analisis teks dan analisis sentimen yang dibina pada rangka kerja Gin adalah sangat berkesan dan praktikal serta boleh membantu kami memahami dengan lebih baik sikap dan emosi orang ramai terhadap jenama, produk dan perkhidmatan kami.

Atas ialah kandungan terperinci Gunakan rangka kerja Gin untuk melaksanakan analisis teks dan fungsi analisis sentimen. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!