【AI】Javaで少し洗練したチャットボットつくるよ!NLP(自然言語処理)技術を組み込んでみた

少し洗練したチャットボットを作ってみますか!

という事で、洗練されたチャットボットを作成するには、NLP(自然言語処理)技術を組み込む必要があります

JavaのNLPライブラリであるStanford CoreNLPを使用します

CoreNLPは形態素解析、品詞タグ付け、構文解析などの機能を提供します

さて、さっそく見ていきましょう


Stanford CoreNLP をプロジェクトに追加します。Maven を使っている場合は、以下の依存関係を pom.xmlに追加します!

<dependency>
    <groupId>edu.stanford.nlp</groupId>
    <artifactId>stanford-corenlp</artifactId>
    <version>4.2.2</version>
</dependency>

続いてJavaファイルです!

import edu.stanford.nlp.pipeline.*;

import java.util.Properties;
import java.util.Scanner;

public class AdvancedChatBot {
    public static void main(String[] args) {
        // Stanford CoreNLPのパイプラインを作成
        Properties props = new Properties();
        props.setProperty("annotators", "tokenize, ssplit, pos, lemma, parse");
        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

        // ユーザーの入力を読み取るScannerを作成
        Scanner scanner = new Scanner(System.in);

        // チャットボットの挨拶メッセージを表示
        System.out.println("チャットボット: こんにちは!私はチャットボットです。質問を入力してください(終了するには「さようなら」と入力してください)");

        // チャットボットのメインループ
        while (true) {
            // ユーザーからの入力を受け取る
            String input = scanner.nextLine();

            // ユーザーが「さようなら」と入力したら、チャットボットを終了
            if (input.equalsIgnoreCase("さようなら")) {
                System.out.println("チャットボット: さようなら!またなっ!");
                break;
            }

            // ユーザーの入力に応じて適切な返答を生成
            String response = generateResponse(input, pipeline);

            // チャットボットの返答を表示
            System.out.println("チャットボット: " + response);
        }

        // Scannerを閉じる
        scanner.close();
    }

    // ユーザーの入力に応じた適切な返答を生成するメソッド
    public static String generateResponse(String input, StanfordCoreNLP pipeline) {
        // 入力文を解析し、形態素解析や構文解析を行う
        Annotation annotation = new Annotation(input);
        pipeline.annotate(annotation);

        // 解析結果から動詞を取得する
        String verb = "";
        for (CoreLabel token : annotation.get(CoreAnnotations.TokensAnnotation.class)) {
            String pos = token.get(CoreAnnotations.PartOfSpeechAnnotation.class);
            if (pos.startsWith("VB")) { // 動詞を見つけたら
                verb = token.get(CoreAnnotations.LemmaAnnotation.class);
                break;
            }
        }

        // 動詞に基づいて返答を生成
        if (!verb.isEmpty()) {
            if (verb.equalsIgnoreCase("be")) {
                return "はい、それは可能です。";
            } else if (verb.equalsIgnoreCase("have")) {
                return "はい、それを持っています。";
            } else {
                return "申し訳ありません、私はよく理解していません。";
            }
        }

        return "申し訳ありません、よく分かりませんでした。もう一度お願いします。";
    }
}

上記の例では、
入力文から動詞を抽出して、その動詞に基づいて適切な対処を生成しています

NLP解析技術には他にも様々な要素がありますが、基本的な理解としては入力文の重要な情報の抽出が主なポイントです!

より高度なチャットボットを構築する場合は、機械学習やディープラーニングモデルを活用することも積極的に活用していくことが必要となります

もっと調査精度高いもの作っていきますよ~

ではっ

是非フォローしてください

最新の情報をお伝えします