日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器

發布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我并不是一個機器學習(Machine Learning)、自然語言處理(Natural Text Processing,NLP)等的狂熱者,但我總會想到一些需要用到它們的主意。我們今天在這篇博文中要實現的目標是:利用 Twitter 數據建立一個實時的職位搜索。每個單獨的搜索結果要包括提供職位的公司名稱、工作的地點、去公司應聘時聯系的人。這需要我們從 個人(Person)、地點(Location)、組織(Organisation)三方面去分析每一條推(tweet)。這類問題被歸為命名實體識別(Named Entity Recognition,NER)問題。

根據維基百科的資料,命名實體識別是信息提取(Information Extraction)的一個子任務,它把文字的原子元素(Atomic Element)定位和分類好,然后輸出為固定格式的目錄,例如: 人名、組織、位置、時間的表示、數量、貨幣值、百分比等。

為了說的更明白,我們來舉個例子。假設我們有下面這條推:

一個普通人可以輕易地分辨出一個名為 PSI Pax 的組織在 Baltimore 有個空缺的職位。但是我們怎么用編程的方式來完成這個識別呢? 最簡單的辦法是維護一個包含所有組織名稱、地點的列表,然后對這個列表進行搜索。然而,這種做法的可擴展性太差了。

今天,在這篇博文中,我會描述如何用斯坦福 NER(Stanford NER) 軟件包去設置我們自己的 NER 服務器。

什么是 斯坦福 NER?

斯坦福 NER 命名實體識別(Named Entity Recognizer,NER)的 Java 實現。 NER 標識一段文字中的一系列名詞,例如人名、公司名,又或者基因名、蛋白質名。

前期準備

  • 一些基本的 Java 知識是需要的。在你的操作系統上安裝最新版本的 JDK,你可以安裝 OpenJDK 或者 Oracle JDK 7。OpenShift 支持 OpenJDK 6 和 7.

  • 從官網中下載斯坦福 NER 軟件包。

  • 注冊一個 OpenShift 賬戶。這是完全免費的,而且紅帽(Red Hat)會給每個用戶三個免費的 Gears,在 Gears 上你可以運行你的程序。在這篇文章寫的時候,OpenShift 會為每個用戶分配 1.5GB 的內存和 3GB 的硬盤空間。

  • 在本機上,安裝 rhc 客戶端工具。rhc 是一個 ruby gem,所以你需要機子上安裝好 ruby 1.8.7 及以上的 ruby。要安裝 rhc,輸入:

  • sudo gem install rhc

    更新 rhc 到最新版本,執行:

    sudo gem updatge rhc

    如果需要閱讀額外的安裝 rhc 命令行工具時的幫助文件,可以瀏覽:https://openshift.redhat.com/community/developers/rhc-client-tools-install

    5.使用 rhc setup 命令設置好 OpenShift 賬戶,這個命令會為你創建一個命名空間,然后上傳你的 ssh keys 到 OpenShift 服務器上。

    第一步:創建一個 JBoss EAP 應用

    我們現在開始創建這個演示應用。這個應用的名稱是 nerdemo

    rhc create-app nerdemo jbosseap

    如果你可以訪問媒介齒輪(Medium Gears),你可以使用下面的命令:

    $ rhc create-app nerdemo jbosseap -g medium

    它會為我們創建一個應用容器,叫做 Gear,會自動設置好需要的 SELinux/cgroup 配置。OpenShift 也會為我們建立一個私密的 git 倉庫,然后可克隆這個倉庫到本地系統上。最后,OpenShift 還會部署一個連接外面的 DNS。部署的應用可以通過鏈接: http://linkbin-domain-name.rhcloud.com/ 來訪問。把領域換成自己的 OpenShit 領域(有時候叫 命令空間)

    第二步:增加 Maven 依賴

    在 pom.xml 文件中,增加一下依賴:

    <dependency><groupId>edu.stanford.nlp</groupId><artifactId>stanford-corenlp</artifactId><version>3.2.0</version> </dependency>

    然后,通過更新 pom.xml 文件中的一些屬性把 Maven 項目更新到 Java 7

    <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target>

    現在,通過 右擊 > Maven > 更新項目 更新 Maven

    第三步:開啟 CDI

    我們會使用 CDI 來進行依賴項注入(Dependency Injection)。CDI(Context and Dependency Injection)是 Java EE 6 的一個特性,它允許在 Java EE 6 項目中的依賴項注入。CDI 為 Java EE 定義一個類型安全(type-safe) 的 依賴項注入機制。幾乎任何 POJO 可以作為 CDI 豆(bean)那樣被注入。

    在 src/main/webapp/WEB-INF 目錄下,創建一個名為 beans.xml 的 xml 文件。用下面的內容代替 beans.xml 的內容:

    <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"></beans>

    第四步:應用程序作用域分類器的豆(Application Scoped Classifier Bean)

    現在,我們創建一個應用程序作用域的豆(bean),這個豆會創建 CRFClassifier 類的實例。這個分類器用于檢測文字中的名字、地點和組織

    package com.nerdemo;import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import javax.inject.Named;import edu.stanford.nlp.ie.crf.CRFClassifier; import edu.stanford.nlp.ling.CoreLabel;@ApplicationScoped public class ClassifierConfig {private String serializedClassifier = "classifiers/english.all.3class.distsim.crf.ser.gz";private CRFClassifier<CoreLabel> classifier;@PostConstructpublic void postConstruct() {CRFClassifier<CoreLabel> classifier = CRFClassifier.getClassifierNoExceptions(serializedClassifier);this.classifier = classifier;}@Produces@Namedpublic CRFClassifier<CoreLabel> classifier() {return classifier;} }

    從下載的斯坦福 NER 軟件包中復制 english.all.3class.distsim.crf.ser.gz 分類器到 src/main/resources/classifiers 目錄下。

    第五步:開啟 AX-RS

    為了開啟 AX-RS,創建一個擴展 javax.ws.rs.core.Application 的類,然后用下面 javax.ws.rs.ApplicationPath 的標記法標記應用程序的路徑:

    package com.nerdemo;import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application;@ApplicationPath("/api/v1") public class JaxrsInitializer extends Application{}

    第六步:創建 ClassifyRestResource 類

    現在我們要創建 ClassifyRestResource 類,它返回一個 NER 結果。創建一個新的 ClassifyRestResource 類,然后用下面代碼代替它:

    package com.nerdemo;import java.util.ArrayList; import java.util.List;import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType;import edu.stanford.nlp.ie.crf.CRFClassifier; import edu.stanford.nlp.ling.CoreAnnotations; import edu.stanford.nlp.ling.CoreLabel;@Path("/classify") public class ClassifierRestResource {@Injectprivate CRFClassifier<CoreLabel> classifier;@GET@Path(value = "/{text}")@Produces(value = MediaType.APPLICATION_JSON)public List<Result> findNer(@PathParam("text") String text) {List<List<CoreLabel>> classify = classifier.classify(text);List<Result> results = new ArrayList<>();for (List<CoreLabel> coreLabels : classify) {for (CoreLabel coreLabel : coreLabels) {String word = coreLabel.word();String answer = coreLabel.get(CoreAnnotations.AnswerAnnotation.class);if(!"O".equals(answer)){results.add(new Result(word, answer));}}}return results;} }

    部署到 OpenShift

    最后,部署所做的改變到 OpenShift:

    $ git add . $ git commit -am "NER demo app" $ git push

    當代碼成功部署之后,我們可以通過訪問 http://nerdemo-{domain-name}.rhcloud.com 看到應用運行。我的示例應用運行在: http://nerdemo-t20.rhcloud.com

    現在,發送一個請求: http://nerdemo-t20.rhcloud.com/api/v1/classify/Microsoft%20SCCM%20Windows%20Server%202012%20Web%20Development%20Expert%20(SME3)%20at%20PSI%20Pax%20(Baltimore,%20MD)

    然后,你就會得到一個 JSON 格式的結果:

    [ {"word":"Microsoft","answer":"ORGANIZATION"}, {"word":"PSI","answer":"ORGANIZATION"}, {"word":"Pax","answer":"ORGANIZATION"}, {"word":"Baltimore","answer":"LOCATION"} ]

    這就是今天的內容了,保持反饋!

    接下來

    • 在線登錄 OpenShift 帳號
    • 通過評估 OpenShift 企業版獲得自己的私有 PaaS(Platform As a Service)。
    • 需要幫助? 去 OpenShift Community 論壇問問題。
    • 在 OpenShift Developer Spotlight 中展示你的酷應用。今天就開始瀏覽下OpenShift 應用展覽

    原文:Day 14: Stanford NER--How To Setup Your Own Name, Entity, and Recognition Server in the Cloud
    翻譯 SegmentFault

    總結

    以上是生活随笔為你收集整理的Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 阿娇全套94张未删图久久 | 日韩欧美在线中文字幕 | 亚洲人免费 | 波多野结衣一区二区三区 | 久热网站 | 激情欧美在线 | 韩国19主播内部福利vip | 一区二区三区免费高清视频 | 91久久电影 | 北条麻纪在线观看aⅴ | 合欢视频在线观看 | 国产精品久久久久久久一区探花 | 麻豆av在线免费观看 | 国产玖玖视频 | 夜夜嗨av禁果av粉嫩avhd | 亚洲第一视频网站 | 精品无码av一区二区三区 | 催眠调教艳妇成肉便小说 | 骚婷婷| 免费色站 | 91久久精品一区二区 | 欧美精品1区2区3区 精品成人一区 | 国产精品国产精品国产专区 | 宅男av| 中文字幕在线欧美 | 成人91网站| 中文字幕自拍 | 人妻在客厅被c的呻吟 | 日本不卡高清视频 | 538任你躁在线精品免费 | 黄色大全免费看 | 在线中文字幕第一页 | 亚洲精品国产精品国自产观看浪潮 | 国产成人av片 | 天天综合网站 | 恶虐女帝安卓汉化版最新版本 | 四虎影视黄色 | 国产不卡一 | 男人狂揉女人下部视频 | 爱爱爱爱网 | 三级av在线免费观看 | 中文字幕日韩经典 | 成年人精品 | 一级特黄妇女高潮2 | 理论片大全免费理伦片 | 夜夜草av | 久久99精品久久久久久噜噜 | 可以免费观看的av | 嫩草影院一区二区三区 | 久久国产成人 | 久久天天躁狠狠躁夜夜av | 日韩精品视频观看 | 九色av | 久久精品人人做人人爽 | 免费观看一区二区三区视频 | 久久久久久久久久免费视频 | 国产一区免费在线 | 国产伦精品一区二区三区免.费 | 日本毛片在线观看 | 国产精品一区在线播放 | 97av超碰 | 华丽的外出在线观看 | 影音先锋在线视频 | 黄a在线| 免费在线观看的av | 免费av福利 | 欧美黑大粗 | 自拍偷拍色 | 色婷婷综合久久久久中文字幕 | 97超碰在线资源 | 精品国产免费视频 | 亚洲激情av | 干美女少妇 | 国产专区欧美专区 | 久草综合视频 | 日本少妇与黑人 | 国产一级视频免费观看 | 北条麻妃一二三区 | 亚洲熟女www一区二区三区 | 成人深夜小视频 | 亚洲精品男女 | 91久久精品日日躁夜夜躁欧美 | 涩涩网站在线观看 | 日韩成人一区二区视频 | 深爱激情综合网 | 98久久久 | 在线观看一区二区视频 | 国产亚洲精品网站 | 伊人久久久久久久久久 | 午夜插插插 | 午夜亚洲天堂 | 人人射人人干 | 一区二区国产电影 | 免费视频爱爱太爽 | 国产精品欧美在线 | xxxx国产 | 久久偷看各类wc女厕嘘嘘偷窃 | 黄色大片aaa| 午夜合集 |