스와힐리어 폐쇄 도메인 텍스트 검색 챗봇

5682 단어 swahiliaichatbotai
소개

최근 대화형 챗봇의 사용이 증가하고 있으며 보다 정확하고 정교한 응답이 필요합니다. 이론적으로는 챗봇이지만 챗봇을 만들기 위해서는 어떤 유형의 챗봇을 개발할지 고려해야 하며 챗봇은 다음 기준에 따라 분류될 수 있습니다.
  • 해당 데이터 소스의 범위
    이 범주는 다음과 같이 분류될 수 있습니다.-

  • ㅏ. 오픈 도메인 챗봇
    -이것은 하나의 주제가 있는 데이터 소스를 사용하는 챗봇의 유형이며, 이 소스는 로컬 또는 온라인에 있을 수 있습니다.

    비. 폐쇄도메인 챗봇
    - 이것은 여러 주제가 있는 데이터 소스를 사용하는 챗봇의 유형이며, 이 소스는 로컬 또는 온라인에 있을 수 있습니다.
  • 응답 생성에 사용하는 수단
    이 범주는 다음과 같이 분류될 수 있습니다.-

  • ㅏ. 자가 생성 응답 챗봇
    - 학습한 개방형 도메인 또는 폐쇄형 도메인 데이터 소스에 따라 자동으로 응답을 생성하는 챗봇 유형을 말합니다.

    비. 검색된 응답 챗봇
    -온라인 또는 로컬에 저장된 개방형 도메인 또는 폐쇄형 도메인 데이터 소스에서 검색하여 응답을 제공하는 챗봇 유형을 말합니다.

    유형

    따라서 이러한 범주에 따라 일반적으로 5가지 유형의 챗봇이 있습니다.
    나. 개방형 도메인 자체 생성 응답 챗봇
    ii. 개방형 도메인 검색 응답 챗봇
    iii. 폐쇄형 도메인 자체 생성 응답 챗봇
    iv. 폐쇄 도메인 검색 응답 챗봇
    v. 하이브리드 챗봇

    이 기사에서는 응답 Swahili 챗봇을 검색하는 기본 폐쇄 도메인을 개발할 예정입니다. 이 챗봇이 사용하는 데이터 소스는 here에 있는 컴퓨터의 지식에 관한 것입니다. 로컬 사용을 위해 텍스트로 복사된 모든 데이터입니다. 파일 및 온라인 소스의 경우 웹 페이지에 대한 링크가 사용됩니다.
    다음 라이브러리가 설치되어 사용됩니다.

    나. 넘파이
    ii. 팬더
    iii. NLTK
    iv. 사이키트 학습
    v. Newspaper3k

    구현

    의 시작하자:

    라이브러리 및 모듈 가져오기

    import io
    import random
    import string
    import warnings
    import numpy as np
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.metrics.pairwise import cosine_similarity
    import nltk
    import re
    import pandas as pd
    from newspaper import Article
    
    
    warnings.filterwarnings('ignore')
    
    


    nltk 모듈 및 라이브러리를 설치하려면 한 번만 실행하십시오.

    nltk.download('popular', quiet=True)
    nltk.download('punkt')
    nltk.download('wordnet')
    nltk.download('omw-1.4')
    
    


    로컬 소스의 데이터 소스/파일에서 데이터 가져오기

    file = open('tarakilishi.txt','r',errors = 'ignore')
    raw = file.read()
    raw = raw.lower()
    
    


    온라인 소스를 사용하는 경우 데이터 소스/파일에서 데이터 가져오기

    raw = Article('https://simple.wikipedia.org/wiki/Light')
    raw.download()
    raw.parse()
    raw.nlp()
    raw = raw.text
    
    


    데이터 소스에서 데이터 토큰화

    sent_tokens = nltk.sent_tokenize(raw)
    word_tokens = nltk.word_tokenize(raw)
    
    


    데이터 토큰을 lammetize하는 기능 정의

    def LemetizeTokens(tokens):
        lemmer = nltk.stem.WordNetLemmatizer()
        return [lemmer.lemmatize(token) for token in tokens]
    


    lammetized 데이터 토큰을 정규화하기 위한 함수 정의

    def LemetizationNormalize(text):
        remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
        return LemetizeTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))
    
    


    사용자 입력 및 봇 응답 정의

    USER_GREETING_INPUTS = ("habari", "habari za sahizi", "habari za asubuhi", "habari za mchana", "habari za jioni", "habari za usiku", "mambo", "habari?", "habari za sahizi?", "habari za asubuhi?", "habari za mchana?", "habari za jioni?", "habari za usiku?", "mambo?")
    BOT_GREETING_RESPONSES = ["nzuri", "poa", "salama", "kheri"]
    
    


    사용자 인사말 및 해당 인사말에 대한 봇 응답을 처리하는 기능 정의

    def greeting(sentence):
        for word in sentence.split():
            if word.lower() in USER_GREETING_INPUTS:
                return random.choice(BOT_GREETING_RESPONSES)
    


    불용어 처리

    data_file = pd.read_csv('Common Swahili Stop-words.csv')
    swahili_stop_words = list(data_file['StopWords'])
    
    


    봇 응답 처리를 위한 함수 정의

    def response(user_response):
        bot_response=''
        sent_tokens.append(user_response)
        TfidfVec = TfidfVectorizer(tokenizer=LemetizationNormalize, stop_words=swahili_stop_words)
        tfidf = TfidfVec.fit_transform(sent_tokens)
        vals = cosine_similarity(tfidf[-1], tfidf)
        idx=vals.argsort()[0][-2]
        flat = vals.flatten()
        flat.sort()
        req_tfidf = flat[-2]
        if(req_tfidf==0):
            robo_response=bot_response+"Samahani sijakuelewa, unaweza rudia tena!!"
            return bot_response
        else:
            bot_response = bot_response+sent_tokens[idx]
            return bot_response
    


    함수 정의 대화 흐름을 처리하는 함수

    
    flag=True
    print("BOT: Habari, tuzungumze kuhusu tanakishi/kompyuta, iwapo huitaji kuendelea na mazungumzo, sema inatosha")
    while(flag==True):
        user_response = input("YOU: ")
        user_response=user_response.lower()
        if(user_response!='inatosha'):
            if(user_response=='asante' or user_response=='asante pia' ):
                flag=False
                print("BOT: usijali")
            else:
                if(greeting(user_response)!=None):
                    print("BOT: "+greeting(user_response))
                else:
                    print("BOT: ",end="")
                    print(response(user_response))
                    sent_tokens.remove(user_response)
        else:
            flag=False
            print("BOT: asante, karibu tena!!")
    
    


    소스 코드는 here에서 찾을 수 있습니다.

    좋은 웹페이지 즐겨찾기