[인공지능 #19 ] 인공지능/딥러닝 실전입문_언어별 크롤링 및 언어식별
인공지능의 실전입문에 관한 글입니다.
알고리즘을 만드는것이 아니고, 만들어진 알로리즘을 활용하는 방법에 관한 글입니다.
자동차 운전을 위해 자동차를 만드는방법을 알필요는 없습니다. 물론 알면 좋기는 하겠지만, 서로 별도의 분야라고 할수있습니다.
본글은 언어구분 방법에 대한 글입니다.
글의 순서는 아래와 같습니다.
=========================================================================================
1. 동작구현 ==> [# 170820 4 lang-train-project_v03 ]
- 프로그램을 실행하면, 프로그램에서 자동으로 독일어 사이트에서 9개의 독일어
원문을 크롤링 해옵니다.
- 별도로 저장한 프랑스어 txt 화일과 함께 학습을 합니다(학습용 5개 : fr-1 ~ fr-5 )
- 프랑스어 4개( fr6~fr9)로 테스트를 실행합니다.
- 평가합니다.
- 특기사항
. 크롤링 프로그램의 경우는 초반에 잘 되다가도, 중간에 인터넷 사이트의 뉴스기사가
바뀌면 간혹 크롤링이 잘 않되는경우가 발생하는것 같습니다 (단순 텍스트만 바뀌면
상관이 없지만, 글의 구조가 바뀌는경우입니다), 감안해서 코딩이 필요합니다.
2. Source code
170820 4 lang-train-project_v03.py
3. 참고자료
==========================================================================================
[# 170820 4 lang-train-project_v03 ]
import urllib.request
from bs4 import BeautifulSoup
import time
from sklearn import svm, metrics
import glob, os.path ,re, json
# train data
# HTML 가져오기
url = "http://www.zeit.de/index"
response = urllib.request.urlopen(url)
# HTML 분석하기
soup = BeautifulSoup(response, "html.parser")
# 원하는 데이터 추출하기 --- (※1)
results = soup.select("#main > div > div.cp-area.cp-area--major div > h2 > a")
i=0
for result in results:
i=i+1
print(i,"st article")
print("title:" , result.attrs["title"])
url_article=result.attrs["href"]
response = urllib.request.urlopen(url_article)
soup_article=BeautifulSoup(response, "html.parser")
content=soup_article.select_one("p")
output=""
for item in content.contents:
stripped=str(item).strip()
if stripped == "":
continue
if stripped[0] not in ["<","/"]:
output+=str(item).strip()
print(output)
# 추출한 data를 txt 화일로 저장하기
fn= "de" +"--"+ str(i)+ ".txt"
fw = open(fn, 'w', encoding='UTF-8', newline='')
# f = open("C:/Python/새파일.txt", 'w')
result_text = output
fw.write(result_text)
fw.close()
# 1초휴식 : 초당 서버호츨 횟수가 늘어나면, 아이디 차단당할수 있음. 휴식시간이 필요함
time.sleep(1.5)
# 학습시키기
files=glob.glob("*--*.txt")
train_data=[]
train_label=[]
i=0
for file_name in files :
i=i+1
print(i)
basename=os.path.basename(file_name)
lang=basename.split("-")[0]
file=open(file_name,"r",encoding="utf-8")
text=file.read()
text=text.lower()
file.close()
code_a = ord("a")
code_z = ord("z")
count = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
for character in text:
code_current=ord(character)
if code_a<=code_current <=code_z :
count[code_current-code_a] +=1
total=sum(count)+0.00001
count=list(map(lambda n : n/total,count))
#리스트에 넣기
train_label.append(lang)
train_data.append(count)
# 테스트 하기: 프랑스어 4개 화일(6~9번)을 테스용 데이터로 사용함
i=0
files=glob.glob("*---*.txt")
test_data=[]
test_label=[]
for file_name in files :
i=i+1
print(i)
basename=os.path.basename(file_name)
lang=basename.split("-")[0]
file=open(file_name,"r",encoding="utf-8")
text=file.read()
text=text.lower()
file.close()
code_a = ord("a")
code_z = ord("z")
count = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
for character in text:
code_current=ord(character)
if code_a<=code_current <=code_z :
count[code_current-code_a] +=1
total=sum(count)+0.00001
count=list(map(lambda n : round(n/total,3),count))
#리스트에 넣기
test_label.append(lang)
test_data.append(count)
# 평가하기
clf = svm.SVC()
clf.fit(train_data, train_label)
predict=clf.predict(test_data)
score=metrics.accuracy_score(test_label, predict)
print("score=",score)
print("=========================================================================")
print("test_data=",test_data)
print("predict=",predict)
[참고자료]
https://www.data.go.kr/main.do
http://konlpy-ko.readthedocs.io/ko/v0.4.3/
https://ithub.korean.go.kr/user/total/database/corpusView.do
'프로젝트 > 인공지능' 카테고리의 다른 글
[ChatBot 만들기 #2 ] 샘플챗봇 제작/실행 (0) | 2017.09.03 |
---|---|
[ChatBot 만들기 #1 ] 개발환경 구성하기 (0) | 2017.08.28 |
[인공지능 #18 ] 인공지능/딥러닝 실전입문_형태소 적용/텍스트(스팸등) 분류 (0) | 2017.08.19 |
[인공지능 #17 ] 인공지능/딥러닝 실전입문_머신러닝에 딥러닝 적용 (0) | 2017.08.19 |
[인공지능 #16 ] 인공지능/딥러닝 실전입문_외국어판별_식용버섯 식별 (0) | 2017.08.16 |