Flutter情感分析插件dart_sentiment的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter情感分析插件dart_sentiment的使用

Dart Sentiment

Flutter Community: dart_sentiment pub package PRs welcome

AFINN-based sentiment analysis for dart

Dart Sentiment 是一个 Dart 包,它使用以下资源来执行情感分析:

Dart Sentiment 提供以下功能:

  • 支持英语、意大利语、法语和德语
  • 支持各种表情符号
  • 基于文本分析,提供一个范围在 -n 到 +n 之间的整数值(详见下文)

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  dart_sentiment: <latest-version>

示例

import 'package:dart_sentiment/dart_sentiment.dart';

void main() {
  final sentiment = Sentiment();

  // 分析英文文本
  print(sentiment.analysis("The cake she made was terrible 😐"));

  // 分析包含表情符号的英文文本
  print(sentiment.analysis("The cake she made was terrible 😐", emoji: true));

  // 分析包含正面和负面情感的英文文本
  print(sentiment.analysis("I love cats, but I am allergic to them."));

  // 分析法语文本
  print(sentiment.analysis("J'adore les chats, mais j'y suis allergique.", languageCode: LanguageCode.french));

  // 分析包含表情符号的法语文本
  print(sentiment.analysis("Le gâteau qu'elle a fait était horrible 😐", emoji: true, languageCode: LanguageCode.french));
}

函数定义

参数 描述
String text 要分析的输入短语
bool emoji = false 输入短语中是否包含表情符号
LanguageCode languageCode = LanguageCode.english 用于情感分析的语言。LanguageCode { english, italian, french, german }

工作原理

AFINN

AFINN 是一个单词列表,每个单词都有一个介于 -5(负面)到 +5(正面)之间的整数值。情感分析通过将字符串标记(单词、表情符号)与 AFINN 列表进行交叉检查并获取它们各自的得分来完成。比较得分计算公式为:所有标记的得分之和 / 标记数量

例如,对于字符串 “I love cats, but I am allergic to them.”,分析结果如下:

{
  score: 1,
  comparative: 0.1111111111111111,
  tokens: [
    "i",
    "love",
    "cats",
    "but",
    "i",
    "am",
    "allergic",
    "to",
    "them"
  ],
  positive: [["love", 3]],
  negative: [["allergic", 2]]
}

在这个例子中,“love” 的值为 3,“allergic” 的值为 -2,其余标记为中性,值为 0。因为字符串有 9 个标记,所以最终的比较得分为 (3 + -2) / 9 = 0.111111111

这种方法使你得到一个中点为 0 的结果,上下限分别为正负 5。例如,假设有一个非常“正面”的字符串,包含 200 个标记,每个标记的 AFINN 得分为 5,那么最终的比较得分将为:

(最大正面得分 * 标记数量) / 标记数量 (5 * 200) / 200 = 5

返回对象

  • Score: 通过加总识别出的单词的情感值计算得出的得分。
  • Comparative: 输入字符串的比较得分。
  • Tokens: 在输入字符串中找到的所有标记,如单词或表情符号。
  • Positive: 输入字符串中在 AFINN 列表中找到的正面单词。
  • Negative: 输入字符串中在 AFINN 列表中找到的负面单词。

贡献

如果你有任何建议、改进或问题,请随时贡献到这个项目。你可以提交新问题或提出拉取请求。请将拉取请求提交到 dev 分支。

许可证

Dart Sentiment 采用 MIT License 发布。

致谢

Dart Sentiment 受启发于 JavaScript 包 sentiment

关于我

我是印度的一名 Flutter 开发者。

LinkedIn Gmail Twitter Website


更多关于Flutter情感分析插件dart_sentiment的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter情感分析插件dart_sentiment的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用dart_sentiment插件进行情感分析的示例代码。dart_sentiment是一个基于VADER(Valence Aware Dictionary and sEntiment Reasoner)算法的Dart库,用于分析文本的情感倾向。

首先,你需要在你的pubspec.yaml文件中添加dart_sentiment依赖:

dependencies:
  flutter:
    sdk: flutter
  dart_sentiment: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中导入dart_sentiment并使用它进行情感分析。以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:dart_sentiment/dart_sentiment.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Sentiment Analysis',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SentimentAnalysisScreen(),
    );
  }
}

class SentimentAnalysisScreen extends StatefulWidget {
  @override
  _SentimentAnalysisScreenState createState() => _SentimentAnalysisScreenState();
}

class _SentimentAnalysisScreenState extends State<SentimentAnalysisScreen> {
  final TextEditingController _controller = TextEditingController();
  String _sentimentResult = '';

  void _analyzeSentiment() {
    final text = _controller.text;
    if (text.isNotEmpty) {
      final sentimentAnalyzer = SentimentAnalyzer();
      final sentimentScore = sentimentAnalyzer.polarityScores(text);
      setState(() {
        _sentimentResult = 'Sentiment: ${sentimentScore['compound']} (Positive: ${sentimentScore['pos']}, Negative: ${sentimentScore['neg']}, Neutral: ${sentimentScore['neu']})';
      });
    } else {
      setState(() {
        _sentimentResult = 'Please enter some text.';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Sentiment Analysis'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Enter text',
                border: OutlineInputBorder(),
              ),
              maxLines: 10,
              expands: true,
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _analyzeSentiment,
              child: Text('Analyze Sentiment'),
            ),
            SizedBox(height: 16),
            Text(
              _sentimentResult,
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个文本输入框和一个按钮。用户可以在文本输入框中输入文本,然后点击按钮来分析文本的情感倾向。分析的结果会显示在按钮下方。

关键点:

  1. 依赖添加:在pubspec.yaml文件中添加dart_sentiment依赖。
  2. 情感分析:使用SentimentAnalyzer类的polarityScores方法来获取文本的情感分数。
  3. UI更新:使用setState方法来更新UI以显示分析结果。

你可以将上述代码复制到你的Flutter项目中,并根据需要进行调整。确保你替换了dart_sentiment的版本号为最新的可用版本号。

回到顶部