지식 도감 - 규칙 에 기초 한 지식 추출
규칙 을 바탕 으로 하 는 지식 추출 은 주로 인공 적 으로 추출 규칙 을 정의 하고 글 에서 3 원 그룹 정보 (실체 - 관계 - 실체) 를 추출 하 는 것 이다.중요 한 것 은 규칙 을 정의 하 는 것 이다.규칙 을 정의 하 는 이런 추출 방식 은 약간 낮 아 보이 지만 간단 하고 실 용적 이 며 많은 깊이 있 는 알고리즘 보다 효과 가 더 좋 을 때 가 많다 (절대적 이지 않 고 구체 적 인 분야 의 구체 적 인 분석).본문 의 데이터 출처 와https://blog.csdn.net/qq_21120275 / article / details / 102159314 가 일치 합 니 다.
원리
본문의 추출 원 리 는 주로 세 단계 로 나 뉜 다.
첫 번 째 단계: 추출 해 야 할 관계 집합 을 정의 합 니 다. 예 를 들 어 [아버지, 어머니, 아들, 딸...] 두 번 째 단계: 글 의 한 마디 한 마디 를 옮 겨 다 니 며 모든 말 에서 비 실체 와 비 관계 집합 안의 단 어 를 세 번 째 단계 로 제거 합 니 다. 한 마디 의 두 번 째 단어 부터 옮 겨 다 니 고 관계 집합 중의 단 어 를 만나면 이 단 어 를 선택 하여 가장 가 까 운 실 체 를 좌우 합 니 다.
본 고 는 모든 코드 를 붙 이지 않 고 중점 코드 만 설명 하고 있다.
실전
1. 규칙 집합 정의
본문 은 간단 한 것 에서 착안 하여 여전히https://blog.csdn.net/qq_21120275 / article / details / 102159314 와 같이 인물 관 계 를 추출 하고 추출 해 야 할 관계 집합 을 먼저 정의 합 니 다.
allowRelationships = [' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ']
2. 데이터 획득
requests 를 사용 하여 글 내용 의 추출 을 진행 합 니 다.
import requests
from lxml import etree
import jieba
from jieba import posseg
import re
hraders={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763'}
url='http://www.uuqgs.com/lsrw/1358.html'
html = requests.get(url,headers=hraders)
text = html.content.decode("gb2312","ignore")
selector = etree.HTML(text)
content=selector.xpath('//div[@id="newscont"]/p/text()')
3. 무관 어구 제거
jieba 품사 인식 을 통 해 nr 의 실체 와 관 계 를 가 진 어 구 를 추출 합 니 다.
#
allowTags = ['nr']
relationships = set()
for line in content:
sentence = []
for word, tag in posseg.cut(line):
if tag == 'nr' or word in alowRelationships:
sentence.append(word)
sentence = ' '.join(sentence)
4. 관계 추출
한 마디 를 옮 겨 다 니 며 두 번 째 어구 부터 이 어구 가 추출 할 관계 어구 에 속한다 면 앞의 어 구 를 주어 로 하고 뒤의 단 어 를 목적어 로 한다.
sentenceSplit = sentence.split(' ')
print(" :", line)
for i in range(1,len(sentenceSplit)-1):
if sentenceSplit[i] in alowRelationships:
source = sentenceSplit[i-1]
relationship = sentenceSplit[i]
target = sentenceSplit[i+1]
print(' :',source+'->'+relationship+'->'+target)
relationships.add(source+'->'+relationship+'->'+target)
5. 추출 결과 검증
결 과 는 다음 과 같다.
'''
: (626 ), , , 。
: -> ->
: , , 。 , 、 、 , 。 [7] 。
: -> ->
: -> ->
: -> -> #
'''
6. 지식 저장
본 논문 의 저장 형식 은 rdf 형식 을 사용 하여 rdflib 공구 꾸러미 를 사용 하여 조작 합 니 다.
import rdflib
g = rdflib.Graph()
pesonUrl = 'http://www.huoyo.org/person/'
relationshipUrl = 'http://www.huoyo.org/relationship/'
for line in relationships:
line = line.split('->')
p1 = rdflib.URIRef(pesonUrl+line[0])
re = rdflib.URIRef(relationshipUrl+line[1])
#p2 = rdflib.URIRef(pesonUrl+line[2])
p2 = rdflib.Literal(line[2])
g.add((p1,re,p2))
g.serialize("graph.rdf")
파일 결 과 는 다음 과 같 습 니 다.
<rdf:RDF
xmlns:ns1="http://www.huoyo.org/relationship/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<rdf:Description rdf:about="http://www.huoyo.org/person/ ">
<ns1: > ns1: >
...
<ns1: > ns1: >
<ns1: > ns1: >
<ns1: > ns1: >
rdf:Description>
<rdf:Description rdf:about="http://www.huoyo.org/person/ ">
<ns1: > ns1: >
rdf:Description>
...
<rdf:Description rdf:about="http://www.huoyo.org/person/ ">
<ns1: > ns1: >
rdf:Description>
rdf:RDF>
7. 조회 검증
sparql 언어 로 조회 검증
g = rdflib.Graph()
g.parse("graph.rdf", format="xml")
q = "PREFIX p: +pesonUrl+">" \
"PREFIX r: +relationshipUrl+">" \
"select distinct ?b where { p: r: ?b }"
x = g.query(q)
t = list(x)
for i in t:
print(i)
3. 총화
본 고 는 주로 규칙 을 바탕 으로 지식 을 추출 하 는데 핵심 점 은 바로 관계 규칙 의 정의 와 규칙 양쪽 의 실체 추출 이다. 전체적인 효 과 는 괜 찮 고 일부 오 류 는 인공 적 으로 관여 해 야 한다.규칙 에 따라 추출 한 장단 점 은 다음 과 같다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PIP 에 Python 을 설치 한 scipy, scrapy 등 가방 에 "failed building wheel for xxx" 문제 해결 방법 이 나 타 났 습 니 다.1. 여기에 해당 하 는. whl 파일 을 다운로드 하고 파일 이름 을 바 꾸 지 않도록 주의 하 세 요!http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml Ctrl + F, lxm...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.