시스템을 구축하는 방법?
구조화되지 않은 텍스트에서 구조화된 정보와 데이터를 추출하는 시스템을 구축하는 방법은 무엇입니까? 이러한 유형의 동작을 사용하는 방법은 무엇입니까? 이 작업에 적합한 말뭉치는 무엇입니까? 모델을 훈련하고 평가하는 것이 가능합니까?
정보 추출, 특히 구조화된 정보 추출은 데이터베이스 기록과 비교할 수 있습니다. 해당 관계는 해당 데이터 정보를 바인딩합니다. 자연어와 같은 비정형 데이터의 경우 해당 관계를 얻기 위해서는 문자열, 요소 등의 일부 데이터 구조를 이용하여 해당 엔터티에 해당하는 특별한 관계를 검색하고 기록해야 합니다.
개체 인식: 차단 기술
예: We saw the yellow dog 차단이라는 개념에 따라 마지막 세 단어는 NP로 나뉘고 그 안에 있는 세 단어는 DT/JJ/NN에 해당합니다. ; 각각 VBD에 할당됩니다. 마지막 세 단어의 경우 NP는 청크(더 큰 집합)입니다. 이를 달성하기 위해 정규 표현식과 유사한 NLTK 고유의 청킹 구문을 사용하여 문장 청킹을 구현할 수 있습니다.
청킹 구문 구성다음 세 가지 사항에 주의하세요.- 기본 청크:
청크: {청크 아래 하위 청크}
(유사:"NP: { <DT>?<JJ>*<NN>}"
이와 같은 문자열). 그리고 ?*+는 정규식의 의미를 저장합니다.
组块 :{组块下的子组块}
(类似于:"NP: {<DT>?<JJ>*<NN>}"
这样的字符串)。而?*+保存了正则表达式的意义。import nltk sentence = [('the','DT'),('little','JJ'),('yellow','JJ'),('dog','NN'),('brak','VBD')] grammer = "NP: {<DT>?<JJ>*<NN>}"cp = nltk.RegexpParser(grammer) #生成规则result = cp.parse(sentence) #进行分块print(result) result.draw() #调用matplotlib库画出来
可以为不包括再大块中的标识符序列定义一个缝隙:
}<VBD|IN>+{
import nltk sentence = [('the','DT'),('little','JJ'),('yellow','JJ'),('dog','NN'),('bark','VBD'),('at','IN'),('the','DT'),('cat','NN')] grammer = """NP: {<DT>?<JJ>*<NN>} }<VBD|NN>+{ """ #加缝隙,必须保存换行符cp = nltk.RegexpParser(grammer) #生成规则result = cp.parse(sentence) #进行分块print(result)
可以递归式的调用,这符合语言结构中的递归嵌套。例如:
VP: {<NP|PP|CLAUSE>*} PP:{<NN><VP>}
。此时,RegexpParser
函数的参数loop
即可以设置为2,多次循环,来防止遗漏。
树状图
如果调用print(type(result))
查看类型就会发现,是 nltk.tree.Tree
。从名字看出来这是一种树状结构。nltk.Tree
可以实现树状结构,并且支持拼接技术,提供结点的查询和树的绘制。
tree1 = nltk.Tree('NP',['Alick'])print(tree1) tree2 = nltk.Tree('N',['Alick','Rabbit'])print(tree2) tree3 = nltk.Tree('S',[tree1,tree2])print(tree3.label()) #查看树的结点tree3.draw()
IOB标记
分别代表内部,外部,开始(就是英语单词的首字母)。对于上面讲的 NP,NN这样的分类,只需要在前面加上 I-/B-/O-即可。这样就能使规则外的集合被显式出来,类似上面的加缝隙。
开发和评估分块器
NLTK已经为我们提供了分块器,减少了手动构建规则。同时,也提供了已经分块好的内容,供我们自己构建规则时候进行参考。
#这段代码在python2下运行from nltk.corpus import conll2000print conll2000.chunked_sents('train.txt')[99] #查看已经分块的一个句子text = """ he /PRP/ B-NP accepted /VBD/ B-VP the DT B-NP position NN I-NP of IN B-PP vice NN B-NP chairman NN I-NP of IN B-PP Carlyle NNP B-NP Group NNP I-NP , , O a DT B-NP merchant NN I-NP banking NN I-NP concern NN I-NP . . O"""result = nltk.chunk.conllstr2tree(text,chunk_types=['NP'])
对于之前自己定义的规则cp
,可以使用cp.evaluate(conll2000.chunked_sents('train.txt')[99])
来测试正确率。利用之前学过的Unigram标注器,可以进行名词短语分块,并且测试准确度
class UnigramChunker(nltk.ChunkParserI):""" 一元分块器, 该分块器可以从训练句子集中找出每个词性标注最有可能的分块标记, 然后使用这些信息进行分块 """def __init__(self, train_sents):""" 构造函数 :param train_sents: Tree对象列表 """train_data = []for sent in train_sents:# 将Tree对象转换为IOB标记列表[(word, tag, IOB-tag), ...]conlltags = nltk.chunk.tree2conlltags(sent)# 找出每个词性标注对应的IOB标记ti_list = [(t, i) for w, t, i in conlltags] train_data.append(ti_list)# 使用一元标注器进行训练self.__tagger = nltk.UnigramTagger(train_data)def parse(self, tokens):""" 对句子进行分块 :param tokens: 标注词性的单词列表 :return: Tree对象 """# 取出词性标注tags = [tag for (word, tag) in tokens]# 对词性标注进行分块标记ti_list = self.__tagger.tag(tags)# 取出IOB标记iob_tags = [iob_tag for (tag, iob_tag) in ti_list]# 组合成conll标记conlltags = [(word, pos, iob_tag) for ((word, pos), iob_tag) in zip(tokens, iob_tags)]return nltk.chunk.conlltags2tree(conlltags) test_sents = conll2000.chunked_sents("test.txt", chunk_types=["NP"]) train_sents = conll2000.chunked_sents("train.txt", chunk_types=["NP"]) unigram_chunker = UnigramChunker(train_sents)print(unigram_chunker.evaluate(test_sents))
命名实体识别和信息提取
命名实体:确切的名词短语,指特定类型的个体,如日期、人、组织等 。如果自己去许梿分类器肯定头大(ˉ▽ ̄~)~~。NLTK提供了一个训练好的分类器--nltk.ne_chunk(tagged_sent[,binary=False])
sent = nltk.corpus.treebank.tagged_sents()[22]print(nltk.ne_chunk(sent,binary=True))
더 큰 청크에 포함되지 않은 식별자 시퀀스에 대해 gap을 정의할 수 있습니다: }<VBD|IN>+ {</ code></p></li></ul><div class="sourceCode"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>#请在Python2下运行import re
IN = re.compile(r&#39;.*\bin\b(?!\b.+ing)&#39;)for doc in nltk.corpus.ieer.parsed_docs(&#39;NYT_19980315&#39;):for rel in nltk.sem.extract_rels(&#39;ORG&#39;,&#39;LOC&#39;,doc,corpus=&#39;ieer&#39;,pattern = IN):print nltk.sem.show_raw_rtuple(rel)</pre><div class="contentsignin">로그인 후 복사</div></div></div>
<p></p>🎜🎜🎜🎜은 재귀적으로 호출할 수 있으며, 이는 언어 구조의 재귀 중첩과 일치합니다. 예: <code>VP: {<np pp:> . 이때, <code>RegexpParser
함수의 loop
매개변수를 2로 설정하여 여러번 반복하여 누락을 방지할 수 있습니다. 🎜🎜트리 다이어그램🎜🎜print(type(result))
를 호출하여 유형을 보면 nltk.tree.Tree라는 것을 알 수 있습니다.
. 이름에서 알 수 있듯이 나무 모양의 구조입니다. nltk.Tree
는 트리 구조를 구현하고 스플라이싱 기술을 지원하며 노드 쿼리 및 트리 그리기를 제공합니다. 🎜🎜rrreee🎜🎜🎜🎜🎜IOB 마크🎜🎜는 각각 내부, 외부, 시작(영문 단어의 첫 글자)을 의미합니다. 위에서 언급한 NP, NN과 같은 분류의 경우 앞에 I-/B-/O-만 추가하면 됩니다. 이를 통해 위의 간격을 추가하는 것과 유사하게 규칙 외부의 컬렉션이 노출될 수 있습니다. 🎜
🎜청커 개발 및 평가🎜🎜NLTK는 이미 청커를 제공하여 수동 구축 규칙을 줄여줍니다. 동시에 자체 규칙을 만들 때 참조할 수 있도록 덩어리로 나누어진 콘텐츠도 제공합니다. 🎜🎜rrreee🎜🎜🎜🎜🎜이전에 정의된 규칙
cp
의 경우 cp.evaluate(conll2000.chunked_sents('train.txt')[99])
를 사용할 수 있습니다. 정확성을 테스트하기 위해. 이전에 배운 Unigram 태거를 사용하여 명사구를 덩어리로 분할하고 정확성을 테스트할 수 있습니다🎜🎜rrreee🎜🎜🎜🎜🎜명명된 엔터티 인식 및 정보 추출🎜🎜🎜명명된 엔터티: 특정 유형을 참조하는 정확한 명사구 날짜, 사람, 조직 등 개인 🎜. 서옌분류사 혼자 가보시면 머리 엄청 크실거에요(ˉ▽ ̄~)~~. NLTK는 훈련된 분류기인 nltk.ne_chunk(tagged_sent[,binary=False])
를 제공합니다. 바이너리가 True로 설정되면 명명된 엔터티는 NE로만 태그가 지정됩니다. 그렇지 않으면 태그가 좀 더 복잡해집니다. 🎜🎜rrreee🎜🎜🎜🎜🎜이름이 지정된 개체가 결정되면 🎜관계 추출🎜을 구현하여 정보를 추출할 수 있습니다. 한 가지 방법은 모든 트리플(X,a,Y)을 찾는 것입니다. 여기서 X와 Y는 명명된 엔터티이고 a는 둘 사이의 관계를 나타내는 문자열입니다. 예는 다음과 같습니다. 🎜🎜rrreee🎜🎜🎜위 내용은 시스템을 구축하는 방법?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Xiaohongshu 메모를 삭제하는 방법 Xiaohongshu 앱에서 메모를 편집할 수 있습니다. 다음으로 편집기는 Xiaohongshu 메모 삭제 방법에 대한 사용자 사진과 텍스트를 가져옵니다. 보세요! Xiaohongshu 사용 튜토리얼 Xiaohongshu 메모 삭제 방법 1. 먼저 Xiaohongshu 앱을 열고 메인 페이지로 들어가서 오른쪽 하단에 있는 [Me]를 선택하여 특별 영역으로 들어갑니다. 2. 그런 다음 내 영역에서 다음과 같이 메모 페이지를 클릭합니다. 3. 노트 페이지에 들어가서 오른쪽 상단에 있는 [점 3개]를 클릭합니다. 4. 마지막으로 기능 표시줄이 하단에 확장되고 [삭제]를 클릭하여 완료합니다.

Xiaohongshu 사용자로서 우리 모두는 게시된 노트가 갑자기 사라지는 상황을 경험해 본 적이 있을 것입니다. 이는 의심할 여지 없이 혼란스럽고 걱정스러운 일입니다. 이런 경우, 우리는 어떻게 해야 합니까? 이번 글에서는 "샤오홍슈에서 발행한 노트가 누락된 경우 어떻게 해야 할까요?"라는 주제를 중심으로 자세한 답변을 드리겠습니다. 1. Xiaohongshu에서 발행한 노트가 누락된 경우 어떻게 해야 합니까? 첫째, 당황하지 마십시오. 메모가 누락된 경우 침착함을 유지하는 것이 중요하며 당황하지 마십시오. 이는 플랫폼 시스템 장애 또는 운영 오류로 인해 발생할 수 있습니다. 출시 기록을 확인하는 것은 쉽습니다. Xiaohongshu 앱을 열고 "나" → "게시" → "모든 출판물"을 클릭하면 자신의 출판 기록을 볼 수 있습니다. 여기에서는 이전에 게시된 메모를 쉽게 찾을 수 있습니다. 3.다시 게시합니다. 발견된 경우

Xiaohongshu 노트에 제품 링크를 추가하는 방법 Xiaohongshu 앱에서는 사용자가 다양한 콘텐츠를 탐색할 수 있을 뿐만 아니라 쇼핑도 할 수 있기 때문에 이 앱에는 쇼핑 추천 및 좋은 제품 공유에 대한 콘텐츠가 많이 있습니다. 이 앱에서는 일부 쇼핑 경험을 공유하고, 협력할 판매자를 찾고, 메모에 링크를 추가하는 등의 작업도 할 수 있습니다. 이 앱은 편리할 뿐만 아니라 많은 전문가가 만들 수 있기 때문에 많은 사람들이 쇼핑에 기꺼이 이 앱을 사용합니다. 흥미로운 콘텐츠를 탐색하고 자신에게 맞는 의류 제품이 있는지 확인할 수 있습니다. 노트에 제품 링크를 추가하는 방법을 살펴보겠습니다. 샤오홍슈 노트에 제품 링크를 추가하는 방법 휴대폰 데스크톱에서 앱을 엽니다. 앱 홈페이지를 클릭하세요

이 튜토리얼에서는 Windows의 Chrome 또는 Edge에서 열려 있는 모든 탭에서 특정 텍스트나 문구를 찾는 방법을 보여줍니다. Chrome에 열려 있는 모든 탭에서 텍스트 검색을 수행하는 방법이 있습니까? 예, Chrome의 무료 외부 웹 확장 프로그램을 사용하면 수동으로 탭을 전환하지 않고도 열려 있는 모든 탭에서 텍스트 검색을 수행할 수 있습니다. TabSearch 및 Ctrl-FPlus와 같은 일부 확장 기능을 사용하면 이를 쉽게 달성할 수 있습니다. Chrome의 모든 탭에서 텍스트를 검색하는 방법은 무엇입니까? Ctrl-FPlus는 사용자가 브라우저 창의 모든 탭에서 특정 단어, 문구 또는 텍스트를 쉽게 검색할 수 있게 해주는 무료 확장 프로그램입니다. 이번 확장

처음부터 Pygame 배우기: 전체 설치 및 구성 튜토리얼, 특정 코드 예제 필요 소개: Pygame은 Python 프로그래밍 언어를 사용하여 개발된 오픈 소스 게임 개발 라이브러리로, 개발자가 다양한 유형을 쉽게 만들 수 있도록 풍부한 기능과 도구를 제공합니다. 게임의. 이 기사는 처음부터 Pygame을 배우는 데 도움이 될 것이며, 완전한 설치 및 구성 튜토리얼과 빠른 시작을 위한 특정 코드 예제를 제공할 것입니다. 1부: Python 및 Pygame 설치 먼저 다음 사항을 확인하세요.

C 언어 학습의 매력: 프로그래머의 잠재력을 여는 것 지속적인 기술 발전으로 컴퓨터 프로그래밍은 많은 주목을 받는 분야가 되었습니다. 많은 프로그래밍 언어 중에서 C 언어는 항상 프로그래머들에게 사랑을 받아 왔습니다. C 언어의 단순성, 효율성 및 폭넓은 적용 덕분에 많은 사람들이 프로그래밍 분야에 입문하는 첫 번째 단계는 C 언어입니다. 이 기사에서는 C 언어 학습의 매력과 C 언어 학습을 통해 프로그래머의 잠재력을 발휘하는 방법에 대해 설명합니다. 우선, C 언어 학습의 매력은 단순함에 있습니다. C언어는 다른 프로그래밍 언어에 비해

Word에서 텍스트 내용을 편집할 때 수식 기호를 입력해야 하는 경우가 있습니다. 어떤 사람들은 Word에서 근수를 입력하는 방법을 모르기 때문에 편집자에게 Word에서 근수를 입력하는 방법에 대한 튜토리얼을 친구들과 공유해달라고 요청했습니다. 그것이 내 친구들에게 도움이 되기를 바랍니다. 먼저 컴퓨터에서 Word 소프트웨어를 연 다음 편집하려는 파일을 열고 루트 기호를 삽입해야 하는 위치로 커서를 이동합니다. 아래 그림 예를 참조하세요. 2. [삽입]을 선택한 후, 기호에서 [수식]을 선택하세요. 아래 그림의 빨간색 원과 같이 3. 아래의 [새 수식 삽입]을 선택하세요. 아래 그림의 빨간색 원과 같이 4. [부수]를 선택한 후 해당 부수를 선택합니다. 아래 그림의 빨간색 원에 표시된 대로:
![[Python NLTK] 텍스트의 의미를 쉽게 이해하기 위한 의미 분석](https://img.php.cn/upload/article/000/465/014/170882647177099.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
NLTK 라이브러리는 의미 분석을 위한 다양한 도구와 알고리즘을 제공하여 텍스트의 의미를 이해하는 데 도움을 줍니다. 이러한 도구 및 알고리즘 중 일부는 다음과 같습니다. POStagged: POStagged는 품사에 단어를 태그하는 프로세스입니다. 품사 태깅은 문장 내 단어 간의 관계를 이해하고 문장 내 주제, 술어, 목적어 및 기타 구성 요소를 결정하는 데 도움이 될 수 있습니다. NLTK는 텍스트에 품사 태깅을 수행하는 데 사용할 수 있는 다양한 품사 태거를 제공합니다. 형태소 분석: 형태소 분석은 단어를 어근으로 줄이는 과정입니다. 형태소 분석은 단어 사이의 관계를 찾고 단어의 기본 의미를 결정하는 데 도움이 될 수 있습니다. NLTK는 다양한 형태소 분석기를 제공합니다.
