지식 도감 - 규칙 에 기초 한 지식 추출

19548 단어 지식 도감NLP
글 목록
  • 1. 안내
  • 2. 원리
  • 3. 실전
  • 1. 규칙 집합 정의
  • 2. 데이터 획득
  • 3. 무관 어구 제거
  • 4. 관계 추출
  • 5. 추출 결과 검증
  • 6. 지식 저장
  • 7. 조회 검증
  • 3. 총화
  • 프로필
    규칙 을 바탕 으로 하 는 지식 추출 은 주로 인공 적 으로 추출 규칙 을 정의 하고 글 에서 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. 총화
    본 고 는 주로 규칙 을 바탕 으로 지식 을 추출 하 는데 핵심 점 은 바로 관계 규칙 의 정의 와 규칙 양쪽 의 실체 추출 이다. 전체적인 효 과 는 괜 찮 고 일부 오 류 는 인공 적 으로 관여 해 야 한다.규칙 에 따라 추출 한 장단 점 은 다음 과 같다.
  • 장점
  • 훈련 필요 없 음
  • 단순 실현
  • 단점
  • 인공 관여 가 필요 하 며, 특히 세부 처리 상
  • 실체 - 관계 - 실체 모델 의 3 원 그룹 만 추출 할 수 있 고 실체 - 실체 - 관계 모델 에 대해 인공 식별 이 필요 하 다
  • 통용 분야 의 실체 식별 에 국한 되 고 특수 실체 와 품사 성 은 단독으로 처리 해 야 한다
  • 좋은 웹페이지 즐겨찾기