目次
エンティティ認識: ブロック技術
树状图
IOB标记
开发和评估分块器
命名实体识别和信息提取
ホームページ バックエンド開発 Python チュートリアル システムを構築するにはどうすればよいですか?

システムを構築するにはどうすればよいですか?

Jun 20, 2017 am 11:00 AM
nltk 情報 勉強 文章 ノート

非構造化テキストから構造化情報とデータを抽出するシステムを構築するにはどうすればよいですか?この種の動作を使用するメソッドは何ですか?この作業にはどのコーパスが適していますか?モデルをトレーニングして評価することは可能ですか?

情報抽出、特に構造化情報抽出は、データベース レコードと比較できます。対応関係は、対応するデータ情報を結び付ける。自然言語などの非構造化データの場合、対応関係を取得するには、文字列や要素などのデータ構造を利用して、エンティティに対応する特殊な関係を検索して記録する必要があります。

エンティティ認識: ブロック技術

例: 黄色い犬を見た、ブロックのアイデアに従って、最後の 3 つの単語が NP に分割され、その中の 3 つの単語が DT/JJ/NN に対応します。それぞれ、saw は VBD に割り当てられ、We は NP に割り当てられます。最後の 3 ワードの場合、NP はチャンク (より大きなセット) です。これを実現するには、正規表現と同様に、NLTK 独自のチャンク構文を使用して文のチャンク化を実装できます。

チャンク構文の構築

次の 3 つの点に注意してください:

  • 基本的なチャンク: チャンク: {チャンクの下のサブチャンク} (次と同様: "NP: {<DT>?<JJ>*<NN>}" のような文字列)。また、?*+ は正規表現の意味を保存します。

组块 :{组块下的子组块}(类似于:"NP: {<DT>?<JJ>*<NN>}"这样的字符串)。而?*+保存了正则表达式的意义。
import nltk
sentence = [(&#39;the&#39;,&#39;DT&#39;),(&#39;little&#39;,&#39;JJ&#39;),(&#39;yellow&#39;,&#39;JJ&#39;),(&#39;dog&#39;,&#39;NN&#39;),(&#39;brak&#39;,&#39;VBD&#39;)]
grammer = "NP: {<DT>?<JJ>*<NN>}"cp = nltk.RegexpParser(grammer) #生成规则result = cp.parse(sentence) #进行分块print(result)

result.draw() #调用matplotlib库画出来
ログイン後にコピー


  • 可以为不包括再大块中的标识符序列定义一个缝隙}<VBD|IN>+{

import nltk
sentence = [(&#39;the&#39;,&#39;DT&#39;),(&#39;little&#39;,&#39;JJ&#39;),(&#39;yellow&#39;,&#39;JJ&#39;),(&#39;dog&#39;,&#39;NN&#39;),(&#39;bark&#39;,&#39;VBD&#39;),(&#39;at&#39;,&#39;IN&#39;),(&#39;the&#39;,&#39;DT&#39;),(&#39;cat&#39;,&#39;NN&#39;)]
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(&#39;NP&#39;,[&#39;Alick&#39;])print(tree1)
tree2 = nltk.Tree(&#39;N&#39;,[&#39;Alick&#39;,&#39;Rabbit&#39;])print(tree2)
tree3 = nltk.Tree(&#39;S&#39;,[tree1,tree2])print(tree3.label()) #查看树的结点tree3.draw()
ログイン後にコピー


IOB标记

分别代表内部,外部,开始(就是英语单词的首字母)。对于上面讲的 NP,NN这样的分类,只需要在前面加上 I-/B-/O-即可。这样就能使规则外的集合被显式出来,类似上面的加缝隙。


开发和评估分块器

NLTK已经为我们提供了分块器,减少了手动构建规则。同时,也提供了已经分块好的内容,供我们自己构建规则时候进行参考。

#这段代码在python2下运行from nltk.corpus import conll2000print conll2000.chunked_sents(&#39;train.txt&#39;)[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=[&#39;NP&#39;])
ログイン後にコピー


对于之前自己定义的规则cp,可以使用cp.evaluate(conll2000.chunked_sents(&#39;train.txt&#39;)[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))
ログイン後にコピー


より大きなチャンクに含まれない識別子のシーケンスに対して ギャップ を定義することが可能です: }<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&amp;#39;.*\bin\b(?!\b.+ing)&amp;#39;)for doc in nltk.corpus.ieer.parsed_docs(&amp;#39;NYT_19980315&amp;#39;):for rel in nltk.sem.extract_rels(&amp;#39;ORG&amp;#39;,&amp;#39;LOC&amp;#39;,doc,corpus=&amp;#39;ieer&amp;#39;,pattern = IN):print nltk.sem.show_raw_rtuple(rel)</pre><div class="contentsignin">ログイン後にコピー</div></div></div> <p></p>🎜🎜🎜🎜は再帰的に呼び出すことができます。これは、言語構造の再帰的な入れ子に沿っています。例: <code>VP: {<np>*} PP:{<nn>gt;<vp>}</vp></nn></np> 。このとき、RegexpParser 関数のパラメータ loop を 2 に設定し、複数回ループすることで抜けを防ぐことができます。 🎜🎜ツリー図🎜🎜 print(type(result)) を呼び出してタイプを表示すると、それが nltk.tree.Tree であることがわかります。 。名前からもわかるように、木のような構造になっています。 nltk.Tree はツリー構造を実現し、スプライシング技術をサポートし、ノード クエリとツリー描画を提供します。 🎜🎜rrreee🎜🎜🎜🎜🎜IOBマーク🎜🎜は、それぞれinternal、external、begining(英語の単語の頭文字)を表します。上記の 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]) を提供します。 binary が True に設定されている場合、名前付きエンティティは NE としてのみタグ付けされます。それ以外の場合、タグはもう少し複雑になります。 🎜🎜rrreee🎜🎜🎜🎜🎜名前付きエンティティが決定されたら、🎜関係抽出🎜を実装して情報を抽出できます。 1 つの方法は、すべてのトリプル (X、a、Y) を見つけることです。ここで、X と Y は名前付きエンティティであり、a は 2 つの関係を表す文字列です。例は次のとおりです。

以上がシステムを構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

小紅書メモを削除する方法 小紅書メモを削除する方法 Mar 21, 2024 pm 08:12 PM

小紅書メモを削除するにはどうすればよいですか? メモは小紅書アプリで編集できます。ほとんどのユーザーは小紅書メモの削除方法を知りません。次に、エディターがユーザーに小紅書メモの削除方法に関する写真とテキストを提供します。チュートリアル、興味のあるユーザーが来て、それを受講してください見てください!小紅書使い方チュートリアル 小紅書メモの削除方法 1. まず小紅書アプリを開いてメインページに入り、右下隅の[自分]を選択して特別エリアに入ります; 2. 次に、マイエリアで、表示されているメモページをクリックします下の図で、削除したいメモを選択します; 3. メモページに入り、右上隅の [3 つの点] をクリックします; 4. 最後に、下部に機能バーが展開され、[削除] をクリックして完了します。

小紅書に投稿したメモが見つからない場合はどうすればよいですか?送信したばかりのメモが見つからない理由は何ですか? 小紅書に投稿したメモが見つからない場合はどうすればよいですか?送信したばかりのメモが見つからない理由は何ですか? Mar 21, 2024 pm 09:30 PM

小紅書のユーザーとして、私たちは皆、公開されたノートが突然消えてしまう状況に遭遇したことがありますが、間違いなく混乱し、心配しています。この場合、どうすればよいでしょうか?この記事では、「小紅書が公開したメモが見つからない場合の対処方法」というテーマに焦点を当て、詳細な回答を提供します。 1. 小紅書が発行したメモが紛失した場合はどうすればよいですか?まず、パニックにならないでください。メモがなくなっていることに気づいた場合は、パニックに陥らず、落ち着いて行動することが重要です。これは、プラットフォームのシステム障害または操作エラーが原因である可能性があります。リリース記録の確認も簡単です。小紅書アプリを開き、「自分」→「公開」→「すべての出版物」をクリックするだけで、自分の出版記録を表示できます。ここでは、以前に公開されたノートを簡単に見つけることができます。 3.再投稿。見つかったら

小紅書でノートに商品リンクを追加する方法 小紅書でノートに商品リンクを追加するチュートリアル 小紅書でノートに商品リンクを追加する方法 小紅書でノートに商品リンクを追加するチュートリアル Mar 12, 2024 am 10:40 AM

小紅書でメモに商品リンクを追加するにはどうすればよいですか?小紅書アプリでは、ユーザーはさまざまなコンテンツを閲覧できるだけでなく、ショッピングもできるため、このアプリにはショッピングのおすすめや良い商品の共有に関するコンテンツがたくさんあります。このアプリでは、ショッピング体験を共有したり、協力してくれる販売者を見つけたり、メモにリンクを追加したりすることもできます。便利なだけでなく、専門家がいくつかの機能を備えているため、多くの人がこのアプリをショッピングに使用したいと考えています。興味深いコンテンツを閲覧して、自分に合った衣料品があるかどうかを確認できます。ノートに商品リンクを追加する方法を見てみましょう! 小紅書ノートに商品リンクを追加する方法 携帯電話のデスクトップでアプリを開きます。アプリのホームページをクリックします

Chrome と Edge のすべてのタブでテキストを検索する方法 Chrome と Edge のすべてのタブでテキストを検索する方法 Feb 19, 2024 am 11:30 AM

このチュートリアルでは、Windows の Chrome または Edge で開いているすべてのタブで特定のテキストまたは語句を検索する方法を説明します。 Chrome で開いているすべてのタブでテキスト検索を行う方法はありますか?はい。Chrome で無料の外部 Web 拡張機能を使用すると、タブを手動で切り替えることなく、開いているすべてのタブでテキスト検索を実行できます。 TabSearch や Ctrl-FPlus などの一部の拡張機能を使用すると、これを簡単に実現できます。 Google Chrome のすべてのタブでテキストを検索するにはどうすればよいですか? Ctrl-FPlus は、ユーザーがブラウザ ウィンドウのすべてのタブで特定の単語、語句、またはテキストを簡単に検索できるようにする無料の拡張機能です。この展開は

C言語の魅力に迫る ~プログラマーの可能性を引き出す~ C言語の魅力に迫る ~プログラマーの可能性を引き出す~ Feb 24, 2024 pm 11:21 PM

C言語学習の魅力:プログラマーの可能性を引き出す テクノロジーの発展に伴い、コンピュータプログラミングは大きな注目を集めている分野です。数あるプログラミング言語の中でもC言語は常にプログラマーに愛されています。そのシンプルさ、効率性、幅広い用途により、C 言語の学習は、多くの人にとってプログラミングの分野に入る最初のステップとなっています。この記事では、C言語を学ぶ魅力と、C言語を学ぶことでプログラマーの可能性を引き出す方法について解説します。 C言語学習の魅力は、まずその簡単さにあります。他のプログラミング言語と比較すると、C言語は

Pygame 入門: 包括的なインストールと構成のチュートリアル Pygame 入門: 包括的なインストールと構成のチュートリアル Feb 19, 2024 pm 10:10 PM

Pygame をゼロから学ぶ: 完全なインストールと構成チュートリアル、特定のコード例が必要 はじめに: Pygame は、Python プログラミング言語を使用して開発されたオープン ソースのゲーム開発ライブラリであり、豊富な機能とツールを提供し、開発者はさまざまなタイプのゲームを簡単に作成できますゲームの。この記事は、Pygame をゼロから学習するのに役立ち、完全なインストールと構成のチュートリアルと、すぐに始めるための具体的なコード例を提供します。パート1:最初にPythonとPygameをインストールして、確認してください

Wordでルート番号を入力する方法を一緒に学びましょう Wordでルート番号を入力する方法を一緒に学びましょう Mar 19, 2024 pm 08:52 PM

Word でテキスト コンテンツを編集するときに、数式記号の入力が必要になる場合があります。 Word でルート番号を入力する方法を知らない人もいるので、Xiaomian は私に、Word でルート番号を入力する方法のチュートリアルを友達と共有するように頼みました。それが私の友達に役立つことを願っています。まず、コンピュータで Word ソフトウェアを開き、編集するファイルを開き、ルート記号を挿入する必要がある場所にカーソルを移動します。下の図の例を参照してください。 2. [挿入]を選択し、記号内の[数式]を選択します。下の図の赤丸で示すように: 3. 次に、下の[新しい数式を挿入]を選択します。以下の図の赤丸で示すように: 4. [根号式]を選択し、適切な根号を選択します。下の図の赤丸で示したように、

Go言語のmain関数をゼロから学ぶ Go言語のmain関数をゼロから学ぶ Mar 27, 2024 pm 05:03 PM

タイトル: Go言語のmain関数をゼロから学ぶ Go言語はシンプルで効率的なプログラミング言語として開発者に好まれています。 Go 言語では、main 関数はエントリ関数であり、すべての Go プログラムにはプログラムのエントリ ポイントとして main 関数が含まれている必要があります。この記事ではGo言語のmain関数をゼロから学ぶ方法と具体的なコード例を紹介します。 1. まず、Go 言語開発環境をインストールする必要があります。公式ウェブサイト (https://golang.org) にアクセスできます。

See all articles