스와힐리어 폐쇄 도메인 텍스트 검색 챗봇
최근 대화형 챗봇의 사용이 증가하고 있으며 보다 정확하고 정교한 응답이 필요합니다. 이론적으로는 챗봇이지만 챗봇을 만들기 위해서는 어떤 유형의 챗봇을 개발할지 고려해야 하며 챗봇은 다음 기준에 따라 분류될 수 있습니다.
이 범주는 다음과 같이 분류될 수 있습니다.-
ㅏ. 오픈 도메인 챗봇
-이것은 하나의 주제가 있는 데이터 소스를 사용하는 챗봇의 유형이며, 이 소스는 로컬 또는 온라인에 있을 수 있습니다.
비. 폐쇄도메인 챗봇
- 이것은 여러 주제가 있는 데이터 소스를 사용하는 챗봇의 유형이며, 이 소스는 로컬 또는 온라인에 있을 수 있습니다.
이 범주는 다음과 같이 분류될 수 있습니다.-
ㅏ. 자가 생성 응답 챗봇
- 학습한 개방형 도메인 또는 폐쇄형 도메인 데이터 소스에 따라 자동으로 응답을 생성하는 챗봇 유형을 말합니다.
비. 검색된 응답 챗봇
-온라인 또는 로컬에 저장된 개방형 도메인 또는 폐쇄형 도메인 데이터 소스에서 검색하여 응답을 제공하는 챗봇 유형을 말합니다.
유형
따라서 이러한 범주에 따라 일반적으로 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에서 찾을 수 있습니다.
Reference
이 문제에 관하여(스와힐리어 폐쇄 도메인 텍스트 검색 챗봇), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/misingo255/swahili-closed-domain-text-retrieval-chatbot-4cko텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)