国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Apache OpenNLP

2019-11-08 20:20:44
字體:
來源:轉載
供稿:網友

Apache OpenNLP庫是一種基于機器學習的工具包,用于處理自然語言文本。

它支持最常見的NLP任務,如標記化,句子分割,詞性標記,命名實體提取,分塊,解析和參考解析。 通常需要這些任務來構建更高級的文本處理服務。 OpenNLP還包括基于最大熵和感知器的機器學習。

功能:

一、語句檢測器

      1、句子檢測

           OpenNLP句子檢測器可以檢測標點符號是否標記句子的結尾。 在這個意義上,句子被定義為兩個標點符號之間的最長的白色空間修剪字符序列。 第一句和最后一句是這條規則的例外。 第一個非空白字符假定為一個句子的開頭,最后一個非空白字符假定為一個句子結尾。下面的示例文本應該被分割成句子。

          在檢測到句子邊界之后,每個句子被寫在其自己的行中。

          通常在文本被標記化之前完成語句檢測,這是網站上預訓練模型的訓練方式,但也可以首先執行標記化,并讓SentenceDetector處理已經標記化的文本。OpenNLP句子檢測器不能基于句子的內容來識別句子邊界。一個突出的例子是文章中的第一句,其中標題被錯誤地識別為第一句的第一部分。OpenNLP中的大多數組件期望輸入被分段為句子。

      2、句子檢測工具

           嘗試Sentence Detector的最簡單的方法是命令行工具。 該工具僅用于演示和測試。下載英語句子檢測器型號,并使用以下命令啟動Sentence Detector工具:

         $ opennlp SentenceDetector en-sent.bin

         只需將示例文本從上面復制到控制臺。Sentence Detector將讀取它,并且每行回一個句子到控制臺。通常輸入從文件讀取,輸出重定向到另一個文件。這可以通過以下命令實現。

         $ opennlp SentenceDetector en-sent.bin < input.txt > output.txt

         對于來自網站的英語句子模型,輸入文本不應被標記化。     3、句子檢查API         句子檢測器可以通過其API輕松集成到應用程序中。要實例化Sentence Detector,必須首先加載句子模型。         InputStream modelIn = new FileInputStream("en-sent.bin");         try {               SentenceModel model = new SentenceModel(modelIn);              }              catch (IOException e) {                      e.PRintStackTrace();           }        finally {               if (modelIn != null) {               try {                    modelIn.close();                    }               catch (IOException e) {            }          }       }      加載模型后,SentenceDetectorME可以實例化。      SentenceDetectorME sentenceDetector = new SentenceDetectorME(model);      Sentence檢測器可以輸出一個字符串數組,其中每個String是一個句子。     String sentences[] = sentenceDetector.sentDetect("  First sentence. Second sentence. ");              結果數組現在包含兩個條目。 第一個字符串是“第一句”。 第二個字符串是“第二個句子”。 刪除輸入字符串之前,之間和之后的空格。 API還提供了一種簡單地返回輸入字符串中句子的跨度的方法。            Span sentences[] = sentenceDetector.sentPosDetect("  First sentence. Second sentence. ");           結果數組還包含兩個條目。第一個span位于索引2處,結束于17.第二個span從18開始,結束于34.實用程序方法Span.getCoveredText可用于創建僅覆蓋該span中的字符的子字符串。   二、句子檢測器培訓              1、培訓工具               OpenNLP有一個命令行工具,用于訓練各種語料庫的模型下載頁面提供的模型。 數據必須轉換為OpenNLP Sentence Detector訓練格式。每行一句。空行表示文檔邊界。 在文檔邊界未知的情況下,其建議每隔十個句子具有空行。完全像上面的示例中的輸出。工具的用途:             $ opennlp SentenceDetectorTrainer              Usage: opennlp SentenceDetectorTrainer[.namefinder|.conllx|.pos] [-abbDict path] /                         [-params paramsFile] [-iterations num] [-cutoff num] -model modelFile /                            -lang language -data sampleData [-encoding charsetName]            Arguments description:                       -abbDict path                              abbreviation dictionary in xml format.                      -params paramsFile                             training parameters file.                      -iterations num                             number of training iterations, ignored if -params is used.                      -cutoff num                             minimal number of times a feature must be seen, ignored if -params is used.                     -model modelFile                             output model file.                     -lang language                             language which is being processed.                    -data sampleData                            data to be used, usually a file name.                   -encoding charsetName                           encoding for reading and writing text, if absent the system default is used.                  要訓練英語句子檢測器,請使用以下命令:           $ opennlp SentenceDetectorTrainer -model en-sent.bin -lang en -data en-sent.train -encoding UTF-8

         

        它應該產生以下輸出:                  Indexing events using cutoff of 5       Computing event counts...  done. 4883 events       Indexing...  done.     Sorting and merging events... done. Reduced 4883 events to 2945.     Done indexing.     Incorporating indexed data for training...       done.            Number of Event Tokens: 2945   Number of Outcomes: 2    Number of Predicates: 467     ...done.     Computing model parameters...     Performing 100 iterations.         1:  .. loglikelihood=-3384.6376826743144 0.38951464263772273         2:  .. loglikelihood=-2191.9266688597672 0.9397911120212984         3:  .. loglikelihood=-1645.8640771555981 0.9643661683391358         4:  .. loglikelihood=-1340.386303774519 0.9739913987302887         5:  .. loglikelihood=-1148.4141548519624 0.9748105672742167       ...<skipping a bunch of iterations>...         95:  .. loglikelihood=-288.25556805874436 0.9834118369854598         96:  .. loglikelihood=-287.2283680343481 0.9834118369854598         97:  .. loglikelihood=-286.2174830344526 0.9834118369854598         98:  .. loglikelihood=-285.222486981048 0.9834118369854598         99:  .. loglikelihood=-284.24296917223916 0.9834118369854598        100:  .. loglikelihood=-283.2785335773966 0.9834118369854598     Wrote sentence detector model.     Path: en-sent.bin     2、Training  API         Sentence Detector還提供了一個API來訓練新的句子檢測模型。 基本上需要三個步驟來訓練它:          應用程序必須打開示例數據流           調用SentenceDetectorME.train方法          將SentenceModel保存到文件或直接使用它          以下示例代碼說明了這些步驟:       Charset charset = Charset.forName("UTF-8");       ObjectStream<String> lineStream =                 new PlainTextByLineStream(new FileInputStream("en-sent.train"), charset);       ObjectStream<SentenceSample> sampleStream = new SentenceSampleStream(lineStream);       SentenceModel model;      try {                 model = SentenceDetectorME.train("en", sampleStream, true, null, TrainingParameters.defaultParams());      }     finally {                sampleStream.close();     }    OutputStream modelOut = null;    try {              modelOut = new BufferedOutputStream(new FileOutputStream(modelFile));              model.serialize(modelOut);     } finally {   if (modelOut != null)               modelOut.close();      }

三、 Detokenizing

         Detokenizing是簡單的相反的標記化,原始的非tokenized字符串應該從token的序列構造。創建了OpenNLP實現以撤銷令牌化器的訓練數據的令牌化。 它也可以用于撤銷這種訓練的分詞器的令牌化。 實現是嚴格基于規則的,并且定義如何將令牌附加到句子明智的字符序列。         規則字典向每個令牌分配一個操作,該操作描述如何將其附加到一個連續字符序列。         可以將以下規則分配給令牌:         MERGE_TO_LEFT - 將令牌合并到左側。         MERGE_TO_RIGHT - 將令牌合并到右側。         RIGHT_LEFT_MATCHING - 將令牌合并到第一次出現的右側和第二次出現的左側。        下面的示例將演示如何使用小規則字典(插圖格式,而不是xml數據格式)的detokenizer:        . MERGE_TO_LEFT        " RIGHT_LEFT_MATCHING                       該字典應該用于對以下空格標記化句子進行標記:                   He said " This is a test " .          令牌將基于字典獲得這些標簽:                      He -> NO_OperaTION          said -> NO_OPERATION          " -> MERGE_TO_RIGHT          This -> NO_OPERATION          is -> NO_OPERATION         a -> NO_OPERATION         test -> NO_OPERATION         " -> MERGE_TO_LEFT         . -> MERGE_TO_LEFT          這將導致以下字符序列:          He said "This is a test".                 TODO:添加關于字典格式的文檔以及如何使用API。四、Detokenizing  API五、


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 焉耆| 从江县| 贵定县| 集贤县| 克拉玛依市| 抚顺市| 广南县| 丰都县| 鹿邑县| 邯郸县| 陆河县| 方正县| 临澧县| 藁城市| 海宁市| 修水县| 桃源县| 分宜县| 噶尔县| 曲靖市| 中山市| 莆田市| 大兴区| 得荣县| 桦南县| 文水县| 余干县| 宿迁市| 朝阳市| 长宁区| 合山市| 灵山县| 平度市| 虹口区| 南投市| 重庆市| 凤台县| 富平县| 大渡口区| 那坡县| 新宁县|