OpenNLP 퀵 가이드
2017.05.30 22:33
OpenNLP 퀵 가이드
OpenNLP - 개요
NLP는 웹 페이지 및 텍스트 문서와 같은 자연 언어 소스에서 의미 있고 유용한 정보를 도출하는 데 사용되는 도구의 집합입니다.
열기 NLP는 무엇인가?
아파치 OpenNLP 자연 언어 텍스트를 처리하는 데 사용되는 오픈 소스 자바 라이브러리입니다. 이 라이브러리를 사용하여 효율적인 텍스트 처리 서비스를 구축 할 수 있습니다.
OpenNLP 등은 토큰, 문장 분할, 품사 태깅, 개체 명 추출, 청크, 파싱, 및 공동 기준 해상도와 같은 서비스를 제공한다
OpenNLP의 특징
OpenNLP의 주목할만한 특징은 다음과 -
-
Named Entity Recognition (NER) - 오픈 NLP는 NER은 당신도 처리 쿼리 동안 위치, 사람과 사물의 이름을 추출 할 수있는 사용을 지원합니다.
-
Summarize -은 Using summarize 기능을 사용하면 단락, 기사, 문서 또는 NLP의 자신의 수집을 요약 할 수 있습니다.
-
Searching - OpenNLP에서, 지정된 검색 문자열 또는 동의어는 주어진 단어가 변경되거나 맞춤법이 틀린 경우에도, 주어진 텍스트에서 확인 할 수있다.
-
Tagging (POS) - 태깅 NLP에서 추가 분석을위한 다양한 문법적 요소에 텍스트를 분할하는데 사용된다.
-
Translation - NLP에서, 번역은 하나의 언어를 다른 언어로 번역하는 데 도움이됩니다.
-
Information grouping - NLP 그룹이 옵션은 단지 언론의 부품과 같은 문서의 내용의 텍스트 정보.
-
Natural Language Generation - 그것은 데이터베이스에서 정보를 생성 및 기상 분석 또는 의료 보고서와 같은 정보 보고서를 자동화하는 데 사용됩니다.
-
Feedback Analysis - 이름에서 알 수 있듯이, 사람들로부터 피드백의 여러 유형의 제품이 그들의 마음을 승리에 성공 얼마나 잘 분석하는 NLP에 의해, 제품에 대한 수집하고 있습니다.
-
Speech recognition - 그것은 인간의 연설을 분석하기 어렵지만, NLP는이 요구 사항에 대한 몇 가지 내장 기능을 가지고 있습니다.
열기 NLP의 API
아파치 OpenNLP 라이브러리는 클래스와 인터페이스는 문장 감지, 토큰 화, 이름을 찾는 품사 태깅, 문장을 청크, 구문 분석, 공동 참조 해상도, 문서 분류 등의 자연 언어 처리의 다양한 작업을 수행 할 수 있습니다.
이러한 작업뿐만 아니라, 우리는 또한 훈련 할 수 있으며 이러한 작업을 위해 우리 자신의 모델을 평가합니다.
OpenNLP CLI
라이브러리에 추가하여, OpenNLP 또한 명령 줄 인터페이스 제공 (CLI) 우리가 훈련 모델을 평가할 수 있습니다. 우리는이 튜토리얼의 마지막 장에서 상세하게이 주제를 논의 할 것이다.
열기 NLP 모델
다양한 NLP의 작업을 수행하려면 OpenNLP는 미리 정의 된 모델 세트를 제공합니다. 이 세트는 다른 언어에 대한 모델이 포함되어 있습니다.
모델 다운로드
당신은 OpenNLP에서 제공하는 미리 정의 된 모델을 다운로드하려면 아래의 단계를 수행 할 수 있습니다.
Step 1 - 다음 링크를 클릭하여 OpenNLP 모델의 인덱스 페이지를 엽니 다.
Step 2 - 지정된 링크를 방문에서 다양한 언어로 다운로드 할 수있는 링크의 구성 요소 목록을 볼 수 있습니다. 여기에서, 당신은 OpenNLP에서 제공하는 모든 미리 정의 된 모델의 목록을 얻을 수 있습니다.
폴더에 모든 모델을 다운로드 C:/OpenNLP_models/> , 각각의 링크를 클릭하여. 이러한 모든 모델은 언어 의존하고 이것들을 사용하는 동안, 당신은 모델 언어가 입력 텍스트의 언어와 일치하는지 확인해야합니다.
OpenNLP의 역사
-
2010 년 OpenNLP 아파치 배양에 들어갔다.
-
2011 년 아파치 OpenNLP 1.5.2 인큐베이팅이 출시되었고, 같은 해에, 그것은 최고 수준 아파치 프로젝트로 졸업했다.
-
2015 년, OpenNLP는 1.6.0 출시되었습니다.
OpenNLP - 환경
이 장에서는 시스템에 어떻게 당신이 할 수있는 설정 OpenNLP 환경을 설명합니다. 의 설치 과정을 시작하자.
OpenNLP 설치
다음은 다운로드하는 단계입니다 Apache OpenNLP library 시스템에이.
Step 1 - 홈페이지 열고 Apache OpenNLP - 다음 링크를 클릭하여 https://opennlp.apache.org/을 .
Step 2 - 이제, 클릭 Downloads 링크. 클릭에, 당신은 당신이 아파치 소프트웨어 재단의 배포 디렉토리로 리디렉션됩니다 다양한 거울을 찾을 수있는 페이지로 이동합니다.
Step 3 -이 페이지에서 다양한 아파치 배포판을 다운로드 할 수있는 링크를 찾을 수 있습니다. 그들을 통해 검색하고 OpenNLP 분포를 찾아서 클릭합니다.
Step 4 - 아래 그림과 같이 클릭에는, 당신은, 당신은 OpenNLP 분포의 인덱스를 볼 수있는 디렉토리로 리디렉션됩니다.
가능한 배포판의 최신 버전을 클릭합니다.
Step 5 - 각각의 분포는 소스 및 다양한 형식의 OpenNLP 라이브러리의 바이너리 파일을 제공합니다. 소스 및 바이너리 파일, 다운로드 apache-opennlp-1.6.0-bin.zip 및 apache-opennlp1.6.0-src.zip (for Windows) .
클래스 경로 설정
OpenNLP 라이브러리를 다운로드 한 후, 당신은 그것의 경로를 설정해야합니다 bin 디렉토리. 당신이 당신의 시스템의 E 드라이브에 OpenNLP 라이브러리를 다운로드 한 것으로 가정합니다.
이제 아래에 주어진 단계를 수행 -
Step 1 - '내 컴퓨터'를 마우스 오른쪽 단추로 클릭하고 '속성'을 선택합니다.
Step 2 - '고급'탭에서 '환경 변수'버튼을 클릭합니다.
Step 3 - 선택 path 변수를하고 클릭 Edit 아래의 스크린 샷과 같이 버튼을 클릭합니다.
Step 4 - 편집 환경 변수 창에서 클릭 New 버튼을하고 OpenNLP 디렉토리에 대한 경로 추가 E:\apache-opennlp-1.6.0\bin 하고 클릭 OK 아래의 스크린 샷과 같이 버튼을 클릭합니다.
이클립스 설치
당신은 OpenNLP 라이브러리, 중 하나를 설정하여 Eclipse 환경을 설정할 수 있습니다 Build path JAR 파일에 또는 사용하여 pom.xml .
에 JAR 파일로 빌드 경로 설정을
- 이클립스에 OpenNLP를 설치하려면 아래의 단계를 따르십시오
Step 1 - 이클립스 환경이 시스템에 설치되어 있는지 확인합니다.
Step 2 - 오픈 이클립스. 아래 그림과 같이, 새로운 → 열기 새 프로젝트 → 파일을 클릭합니다.
Step 3 - 당신은 얻을 것이다 New Project 마법사를. 이 마법사에서 자바 프로젝트를 선택하고 클릭하여 계속 Next 버튼을 클릭합니다.
Step 4 - 다음, 당신은 얻을 것이다 New Java Project wizard . 여기에서, 당신은 새 프로젝트를 생성하고 클릭해야 Next 다음과 같이 버튼을 클릭합니다.
Step 5 - 새 프로젝트를 생성 한 후, 그 위에, 선택하고 마우스 오른쪽 버튼을 클릭 한 Build Path 클릭 Configure Build Path .
Step 6 - 다음, 당신은 얻을 것이다 Java Build Path 마법사를. 여기에서 클릭 Add External JARs 다음과 같이 버튼을 클릭합니다.
Step 7 - jar 파일을 선택 opennlp-tools-1.6.0.jar 와 opennlp-uima-1.6.0.jar 에있는 lib 의 폴더 apache-opennlp-1.6.0 folder .
딸깍에 Open 위의 화면에서 버튼을, 선택한 파일을 라이브러리에 추가됩니다.
클릭에 OK 성공적 현재 프로젝트에 필요한 JAR 파일을 추가하고 다음과 같이 당신은, 참조 된 라이브러리를 확장하여 이러한 추가 라이브러리를 확인할 수 있습니다.
pom.xml 파일을 사용하여
메이븐 프로젝트로 프로젝트를 변환하고 다음 코드를 추가 pom.xml .
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>myproject</groupId> <artifactId>myproject</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.opennlp</groupId> <artifactId>opennlp-tools</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>org.apache.opennlp</groupId> <artifactId>opennlp-uima</artifactId> <version>1.6.0</version> </dependency> </dependencies> </project>
OpenNLP - 참조 된 API
이 장에서 우리는이 튜토리얼의 다음 장에서 사용하게 될 클래스와 메소드에 대해 논의 할 것이다.
문장 감지
SentenceModel 클래스
이 클래스는 주어진 원시 텍스트의 문장을 감지하는 데 사용되는 미리 정의 된 모델을 나타냅니다. 이 클래스는 패키지에 속하는 opennlp.tools.sentdetect .
이 클래스의 생성자는 수용 InputStream 문장 검출기 모델 파일의 객체 (en-sent.bin) .
SentenceDetectorME 클래스
이 클래스는 패키지에 속하는 opennlp.tools.sentdetect 과 문장에 원시 텍스트를 분할하는 방법이 포함되어 있습니다. 이 클래스는 문장의 끝을 의미하는지 확인하기 위해 문자열의 최종 ofsentence 문자를 평가하기 위해 최대 엔트로피 모델을 사용합니다.
다음은이 클래스의 중요한 방법이다.
S.No | 방법 및 설명 |
---|---|
1 |
sentDetect() 이 방법은 전달 된 원시 텍스트에서 문장을 검색하는 데 사용됩니다. 이 매개 변수로 String 변수를 받아 주어진 원시 텍스트에서 문장을 유지하는 문자열 배열을 반환합니다. |
이 |
sentPosDetect() 이 방법은 주어진 텍스트에서 문장의 위치를 감지하는 데 사용됩니다. 이 방법은 문장을 나타내는 문자열 변수를 받아 유형의 객체의 배열 반환 Span . 라는 이름의 클래스 Span 의 opennlp.tools.util 패키지 세트의 시작과 끝 정수를 저장하는 데 사용됩니다. |
삼 |
getSentenceProbabilities() 이 방법은 가장 최근 통화와 관련된 확률 반환 sentDetect() 메소드를. |
토큰 화
TokenizerModel 클래스
이 클래스는 주어진 문장을 토큰 화하는 데 사용되는 미리 정의 된 모델을 나타냅니다. 이 클래스는 패키지에 속하는 opennlp.tools.tokenizer .
이 클래스의 생성자는 수용 InputStream 토크 나이 모델 파일의 객체 (entoken.bin) .
클래스
토큰 화를 수행하려면 OpenNLP 라이브러리는 세 가지 주요 클래스를 제공합니다. 모든 세 가지 클래스라는 인터페이스 구현 Tokenizer .
S.No | 클래스 및 설명 |
---|---|
1 |
SimpleTokenizer 이 클래스는 문자 클래스를 사용해, 지정된 원시 텍스트를 토큰 화합니다. |
이 |
WhitespaceTokenizer 이 클래스는 주어진 텍스트를 토큰 화하기 위해 공백을 사용합니다. |
삼 |
TokenizerME 이 클래스는 별도의 토큰 원시 텍스트를 변환합니다. 그것은 그것의 결정을 내릴 최대 엔트로피를 사용합니다. |
이러한 클래스는 다음과 같은 방법을 포함한다.
S.No | 방법 및 설명 |
---|---|
1 |
tokenize() 이 방법은 원시 텍스트를 토큰 화하는 데 사용됩니다. 이 방법은 파라미터로서 문자열 변수를 수용하고, 문자열 배열 반환 (tokens) . |
이 |
sentPosDetect() 이 방법은 토큰의 위치 또는 스팬을 가져 오는 데 사용됩니다. 이 문장 허용 (or) 문자열의 형태로 원시 텍스트 및 유형의 객체의 배열 반환 Span . |
상기 두 가지 방법에 더하여, TokenizerME 클래스가 가지고 getTokenProbabilities() 방법.
S.No | 방법 및 설명 |
---|---|
1 |
getTokenProbabilities() 이 방법은 가장 최근 통화와 관련된 확률 가져 오는 데 사용됩니다 tokenizePos() 메소드를. |
NameEntityRecognition
TokenNameFinderModel 클래스
이 클래스는 주어진 문장에서 명명 된 개체를 찾기 위해 사용되는 미리 정의 된 모델을 나타냅니다. 이 클래스는 패키지에 속하는 opennlp.tools.namefind .
이 클래스의 생성자는 수용 InputStream 이름 파인더 모델 파일의 객체 (enner-person.bin) .
NameFinderME 클래스
클래스는 패키지에 속하는 opennlp.tools.namefind 과는 NER 작업을 수행하는 방법이 포함되어 있습니다. 이 클래스는 주어진 원시 텍스트로 명명 된 개체를 찾을 최대 엔트로피 모델을 사용합니다.
S.No | 방법 및 설명 |
---|---|
1 |
find() 이 방법은 원시 텍스트로 이름을 검색하는 데 사용됩니다. 이 매개 변수로 원시 텍스트를 나타내는 String 변수를 허용하고, 유형 스팬의 객체의 배열을 반환합니다. |
이 |
probs() 이 방법은 마지막 디코딩 시퀀스의 확률을 가져 오는 데 사용됩니다. |
음성의 부품을 찾기
POSModel 클래스
이 클래스는 주어진 문장의 품사를 태그하는 데 사용되는 미리 정의 된 모델을 나타냅니다. 이 클래스는 패키지에 속하는 opennlp.tools.postag .
이 클래스의 생성자는 수용 InputStream 는 POS-술래 모델 파일의 객체 (enpos-maxent.bin) .
POSTaggerME 클래스
이 클래스는 패키지에 속하는 opennlp.tools.postag 주어진 원시 텍스트의 연설의 일부를 예측하는 데 사용됩니다. 그것은 그것의 결정을 내릴 최대 엔트로피를 사용합니다.
S.No | 방법 및 설명 |
---|---|
1 |
tag() 이 방법은 토큰 POS 태그의 문장을 할당하는 데 사용됩니다. 이 방법은 토큰의 배열을 받아들 (String) 매개 변수로 사용을하고, 태그를 반환 (array) . |
이 |
getSentenceProbabilities() 이 방법은 최근에 태그 문장의 각 태그의 확률을 가져 오는 데 사용됩니다. |
문장을 구문 분석
ParserModel 클래스
이 클래스는 주어진 문장을 분석하는 데 사용되는 미리 정의 된 모델을 나타냅니다. 이 클래스는 패키지에 속하는 opennlp.tools.parser .
이 클래스의 생성자는 수용 InputStream 파서 모델 파일의 객체 (en-parserchunking.bin) .
파서 팩토리 클래스
이 클래스는 패키지에 속하는 opennlp.tools.parser 파서를 만드는 데 사용됩니다.
S.No | 방법 및 설명 |
---|---|
1 |
create() 이 고정 방법이며 이는 파서 객체를 생성하는 데 사용된다. 이 방법은 파서 모델 파일의 FileStream 객체를 사용할 수 있습니다. |
ParserTool 클래스
이 클래스는에 속하는 opennlp.tools.cmdline.parser 내용을 구문 분석하는 데 사용되는 패키지.
S.No | 방법 및 설명 |
---|---|
1 |
parseLine() 의이 방법 ParserTool 클래스는 OpenNLP에서 원시 텍스트를 구문 분석하는 데 사용됩니다. 이 방법은 받아 -
|
청크
ChunkerModel 클래스
이 클래스는 작은 덩어리로 문장을 분할하는 데 사용되는 미리 정의 된 모델을 나타냅니다. 이 클래스는 패키지에 속하는 opennlp.tools.chunker .
이 클래스의 생성자는 수용 InputStream 의 객체 chunker 모델 파일 (enchunker.bin) .
ChunkerME 클래스
이 클래스는 패키지 이름에 속하는 opennlp.tools.chunker 작은 조각에 주어진 문장을 분할하는 데 사용됩니다.
S.No | 방법 및 설명 |
---|---|
1 |
chunk() 이 방법은 작은 조각에 주어진 문장을 분할하는 데 사용됩니다. 그것은 문장의 토큰 및 수용 P 예술 O f를 S 매개 변수로 peech 태그를. |
이 |
probs() 이 방법은 마지막 디코딩 순서의 확률을 반환합니다. |
OpenNLP - 문장 검색
자연 언어 처리 문장의 시작과 끝을 결정하는 동안 해결해야 할 문제 중 하나입니다. 이 과정으로 알려져 S entence B oundary의 D isambiguation (SBD) 또는 단순히 문장 브레이킹.
우리는 주어진 텍스트에서 문장을 감지하는 데 사용하는 기술은 텍스트의 언어에 따라 달라집니다.
자바를 사용하여 문장 감지
우리는 정규 표현식을 사용하여 Java에서 주어진 텍스트의 문장, 간단한 규칙을 감지 할 수 있습니다.
예를 들어, 우리가 기간, 물음표를 가정하자, 또는 느낌표가 주어진 텍스트에서 문장을 종료, 우리가 사용하는 문장을 분할 할 수 있습니다 split() 의 방법 String 클래스를. 여기서 우리는 문자열 형식의 정규 표현식을 통과해야합니다.
다음은 자바 정규 표현식을 사용하여 주어진 텍스트의 문장을 결정하는 프로그램입니다 (split method) . 이름으로 파일에이 프로그램을 저장 SentenceDetection_RE.java .
public class SentenceDetection_RE { public static void main(String args[]) { String sentence = " Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; String simple = "[.?!]"; String[] splitString = (sentence.split(simple) ); for (String string : splitString) System.out.println(string) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행합니다.
javac SentenceDetection_RE.java java SentenceDetection_RE
실행에, 위의 프로그램은 다음과 같은 메시지를 표시하는 PDF 문서를 생성합니다.
Hi How are you Welcome to Tutorialspoint We provide free tutorials on various technologies
OpenNLP를 사용하여 문장 감지
문장을 감지하기 위해 OpenNLP는 미리 정의 된 모델이라는 파일 사용 en-sent.bin . 이 사전 정의 된 모델은 주어진 원시 텍스트에서 문장을 감지하도록 훈련된다.
opennlp.tools.sentdetect 패키지는 문장 탐지 작업을 수행하는 데 사용되는 클래스 및 인터페이스가 포함되어 있습니다.
OpenNLP 라이브러리를 사용하여 문장을 검색하려면 다음을 수행해야합니다 -
-
부하 en-sent.bin 은 Using 모델 SentenceModel 클래스
-
이 instantiate SentenceDetectorME 클래스를.
-
사용하여 문장 감지 sentDetect() 이 클래스의 방법을.
다음 주어진 원시 텍스트에서 문장을 감지하는 프로그램을 작성하기 위해 따라야하는 단계입니다.
1 단계 : 모델을로드
문장 검출 모델의 이름은 클래스에 의해 표현된다 SentenceModel 패키지에 속하는, opennlp.tools.sentdetect .
문장 탐지 모델을로드하려면 -
-
만들기 InputStream 모델의 개체를 (Instantiate the FileInputStream and pass the path of the model in String format to its constructor) .
-
이 instantiate SentenceModel 클래스 및 전달 InputStream (object) 는 다음 코드 블록에 도시 된 바와 같이, 생성자 파라미터로서 모델을 -
//Loading sentence detector model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/ensent.bin") ; SentenceModel model = new SentenceModel(inputStream) ;
2 단계 : SentenceDetectorME 클래스를 인스턴스화
SentenceDetectorME 패키지의 클래스 opennlp.tools.sentdetect 방법을 포함 문장에 원시 텍스트를 분할합니다. 이 클래스는 문장의 끝을 의미하는지 확인하기 위해 문자열의 끝 문장 문자를 평가하기 위해 최대 엔트로피 모델을 사용합니다.
이 클래스의 인스턴스를 아래와 같이, 이전 단계에서 생성 된 모델 객체를 전달한다.
//Instantiating the SentenceDetectorME class SentenceDetectorME detector = new SentenceDetectorME(model) ;
3 단계 : 문장을 검출
sentDetect() 의 방법 SentenceDetectorME 클래스는 전달 된 원시 텍스트에서 문장을 검색하는 데 사용됩니다. 이 방법은 매개 변수로 문자열 변수를 받아들입니다.
이 방법으로 문장의 문자열 형식을 전달하여,이 메소드를 호출합니다.
//Detecting the sentence String sentences[] = detector.sentDetect(sentence) ;
Example
다음은 주어진 원시 텍스트의 문장을 감지 프로그램입니다. 라는 이름의 파일이 프로그램을 저장 SentenceDetectionME.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; public class SentenceDetectionME { public static void main(String args[]) throws Exception { String sentence = "Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; //Loading sentence detector model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin") ; SentenceModel model = new SentenceModel(inputStream) ; //Instantiating the SentenceDetectorME class SentenceDetectorME detector = new SentenceDetectorME(model) ; //Detecting the sentence String sentences[] = detector.sentDetect(sentence) ; //Printing the sentences for(String sent : sentences) System.out.println(sent) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac SentenceDetectorME.java java SentenceDetectorME
실행에서, 상기 프로그램은 소정의 문자열을 판독하고 상기 문장을 검출하고, 다음 출력을 표시한다.
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
명제의 위치를 검출
우리는 또한 사용하여 문장의 위치를 감지 할 수 sentPosDetect() 의 방법 SentenceDetectorME class .
다음 주어진 원시 텍스트에서 문장의 위치를 감지하는 프로그램을 작성하기 위해 따라야하는 단계입니다.
1 단계 : 모델을로드
문장 검출 모델의 이름은 클래스에 의해 표현된다 SentenceModel 패키지에 속하는, opennlp.tools.sentdetect .
문장 탐지 모델을로드하려면 -
-
만들기 InputStream 모델의 개체를 (Instantiate the FileInputStream and pass the path of the model in String format to its constructor) .
-
이 instantiate SentenceModel 클래스 및 전달 InputStream (object) 는 다음 코드 블록에 도시 된 바와 같이, 생성자 파라미터로서 모델을.
//Loading sentence detector model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin") ; SentenceModel model = new SentenceModel(inputStream) ;
2 단계 : SentenceDetectorME 클래스를 인스턴스화
SentenceDetectorME 패키지의 클래스 opennlp.tools.sentdetect 방법을 포함 문장에 원시 텍스트를 분할합니다. 이 클래스는 문장의 끝을 의미하는지 확인하기 위해 문자열의 끝 문장 문자를 평가하기 위해 최대 엔트로피 모델을 사용합니다.
이 클래스의 인스턴스를 생성하고 이전 단계에서 만든 모델 객체를 전달합니다.
//Instantiating the SentenceDetectorME class SentenceDetectorME detector = new SentenceDetectorME(model) ;
3 단계 : 문장의 위치를 검출
sentPosDetect() 의 방법 SentenceDetectorME 클래스는 전달 된 원시 텍스트 문장의 위치를 검출하는데 사용된다. 이 방법은 매개 변수로 문자열 변수를 받아들입니다.
이 방법에 대한 매개 변수로 문장의 문자열 형식을 전달하여,이 메소드를 호출합니다.
//Detecting the position of the sentences in the paragraph Span[] spans = detector.sentPosDetect(sentence) ;
4 단계 : 문장의 스팬 인쇄
sentPosDetect() 의 방법 SentenceDetectorME 클래스 타입의 오브젝트의 배열 반환 Span . 의 스팬라는 이름의 클래스 opennlp.tools.util 패키지 세트의 시작과 끝 정수를 저장하는 데 사용됩니다.
사용자는 리턴하여 스팬 저장할 수 sentPosDetect() 스판 배열 방법을 다음 코드 블록에서와 같이, 그들을 출력한다.
//Printing the sentences and their spans of a sentence for (Span span : spans) System.out.println(paragraph.substring(span) ;
Example
다음은 주어진 원시 텍스트의 문장을 감지 프로그램입니다. 라는 이름의 파일이 프로그램을 저장 SentenceDetectionME.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.util.Span; public class SentencePosDetection { public static void main(String args[]) throws Exception { String paragraph = "Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; //Loading sentence detector model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin") ; SentenceModel model = new SentenceModel(inputStream) ; //Instantiating the SentenceDetectorME class SentenceDetectorME detector = new SentenceDetectorME(model) ; //Detecting the position of the sentences in the raw text Span spans[] = detector.sentPosDetect(paragraph) ; //Printing the spans of the sentences in the paragraph for (Span span : spans) System.out.println(span) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac SentencePosDetection.java java SentencePosDetection
실행에서, 상기 프로그램은 소정의 문자열을 판독하고 상기 문장을 검출하고, 다음 출력을 표시한다.
[0..16) [17..43) [44..93)
자신의 포지션과 함께 문장
substring() String 클래스의 방법은 받아 begin 과 end offsets 하고 각각의 문자열을 반환합니다. 우리는 문장과 스팬 인쇄하려면이 방법을 사용할 수 있습니다 (positions) 다음 코드 블록에서와 같이, 함께.
for (Span span : spans) System.out.println(sen.substring(span.getStart() , span.getEnd() )+" "+ span);
다음은 주어진 원시 텍스트에서 문장을 감지하고 자신의 위치와 함께이를 표시 할 수있는 프로그램입니다. 이름을 가진 파일이 프로그램을 저장 SentencesAndPosDetection.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.util.Span; public class SentencesAndPosDetection { public static void main(String args[]) throws Exception { String sen = "Hi. How are you? Welcome to Tutorialspoint." + " We provide free tutorials on various technologies"; //Loading a sentence model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin") ; SentenceModel model = new SentenceModel(inputStream) ; //Instantiating the SentenceDetectorME class SentenceDetectorME detector = new SentenceDetectorME(model) ; //Detecting the position of the sentences in the paragraph Span[] spans = detector.sentPosDetect(sen) ; //Printing the sentences and their spans of a paragraph for (Span span : spans) System.out.println(sen.substring(span.getStart() , span.getEnd() )+" "+ span); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac SentencesAndPosDetection.java java SentencesAndPosDetection
실행에, 위의 프로그램은 주어진 문자열을 읽고 자신의 위치와 함께 문장을 감지하고 다음과 같은 출력을 표시합니다.
Hi. How are you? [0..16) Welcome to Tutorialspoint. [17..43) We provide free tutorials on various technologies [44..93)
문장 확률 감지
getSentenceProbabilities() 의 방법 SentenceDetectorME 클래스는 가장 최근 통화와 관련된 확률 반환 sentDetect() 메소드를.
//Getting the probabilities of the last decoded sequence double[] probs = detector.getSentenceProbabilities() ;
다음은에 대한 호출과 관련된 확률 인쇄 할 수있는 프로그램입니다 sentDetect() 메소드를. 이름으로 파일에이 프로그램을 저장 SentenceDetectionMEProbs.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; public class SentenceDetectionMEProbs { public static void main(String args[]) throws Exception { String sentence = "Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; //Loading sentence detector model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin") ; SentenceModel model = new SentenceModel(inputStream) ; //Instantiating the SentenceDetectorME class SentenceDetectorME detector = new SentenceDetectorME(model) ; //Detecting the sentence String sentences[] = detector.sentDetect(sentence) ; //Printing the sentences for(String sent : sentences) System.out.println(sent) ; //Getting the probabilities of the last decoded sequence double[] probs = detector.getSentenceProbabilities() ; System.out.println(" ") ; for(int i = 0; i<probs.length; i++) System.out.println(probs[i]) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac SentenceDetectionMEProbs.java java SentenceDetectionMEProbs
실행에, 위의 프로그램은 주어진 문자열을 읽고 문장을 감지하고이를 인쇄합니다. 또한, 그것은 또한 가장 최근 통화와 관련된 확률 반환 sentDetect() 아래 그림과 같이, 방법.
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies 0.9240246995179983 0.9957680129995953 1.0
OpenNLP - 토큰 화
작은 부분으로 주어진 문장을 자르고 프로세스 (tokens) 라고도 tokenization . 일반적으로, 주어진 원 텍스트 구분의 세트에 기초하여 토큰 화되고 (mostly whitespaces) .
토큰 화 등의 맞춤법 검사 처리의 검색, 음성 식별 부, 예문 검색, 문서의 문서 분류와 같은 작업에 사용되는
OpenNLP를 사용하여 토큰 화
opennlp.tools.tokenize 패키지는 토큰 화를 수행하기 위해 사용되는 클래스 및 인터페이스를 포함한다.
간단한 조각으로 주어진 문장을 토큰 화하려면 OpenNLP 라이브러리는 세 가지 클래스를 제공합니다 -
-
SimpleTokenizer -이 클래스는 문자 클래스를 사용해, 지정된 원시 텍스트를 토큰 화합니다.
-
WhitespaceTokenizer -이 클래스는 주어진 텍스트를 토큰 화하기 위해 공백을 사용합니다.
-
TokenizerME -이 클래스는 별도의 토큰으로 변환 텍스트를 변환합니다. 그것은 그것의 결정을 내릴 최대 엔트로피를 사용합니다.
SimpleTokenizer
사용하여 문장을 토큰 화하기 위해 SimpleTokenizer 클래스를, 당신이 필요 -
-
각 클래스의 객체를 생성합니다.
-
사용하여 문장을 토큰 화 tokenize() 메소드를.
-
토큰을 인쇄합니다.
다음 주어진 원시 텍스트를 토큰 화하는 프로그램을 작성하기 위해 따라야하는 단계입니다.
Step 1 - 각각의 클래스를 인스턴스화
두 클래스에서, 그것들을 초기화하는 데 사용할 수 생성자가 없습니다. 따라서, 우리는 정적 변수 사용하여 이러한 클래스의 개체를 만들 필요가 INSTANCE .
SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;
Step 2 - 문장을 토큰 화
이 두 클래스는 메소드 호출 포함 tokenize() . 이 방법은 문자열 형식의 원시 텍스트를 받아들입니다. 호출, 그것은 주어진 문자열을 토큰 화 및 문자열의 배열을 반환합니다 (tokens) .
문장은 USING 토큰 화 tokenizer() 아래와 같은 방법.
//Tokenizing the given sentence String tokens[] = tokenizer.tokenize(sentence) ;
Step 3 - 토큰을 인쇄
문장을 토큰 화 한 후 사용하여 토큰을 인쇄 할 수 있습니다 for loop 다음과 같이.
//Printing the tokens for(String token : tokens) System.out.println(token) ;
Example
다음은 SimpleTokenizer 클래스를 사용하여 주어진 문장을 토큰 화 프로그램이다. 이름으로 파일에이 프로그램을 저장 SimpleTokenizerExample.java .
import opennlp.tools.tokenize.SimpleTokenizer; public class SimpleTokenizerExample { public static void main(String args[]) { String sentence = "Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; //Instantiating SimpleTokenizer class SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE; //Tokenizing the given sentence String tokens[] = simpleTokenizer.tokenize(sentence) ; //Printing the tokens for(String token : tokens) { System.out.println(token) ; } } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac SimpleTokenizerExample.java java SimpleTokenizerExample
실행에서, 상기 프로그램은 소정의 문자열 판독 (raw text) 를 토큰 화, 다음 출력을 표시 -
Hi . How are you ? Welcome to Tutorialspoint . We provide free tutorials on various technologies
WhitespaceTokenizer
사용하여 문장을 토큰 화하기 위해 WhitespaceTokenizer 클래스를, 당신이 필요 -
-
각 클래스의 객체를 생성합니다.
-
사용하여 문장을 토큰 화 tokenize() 메소드를.
-
토큰을 인쇄합니다.
다음 주어진 원시 텍스트를 토큰 화하는 프로그램을 작성하기 위해 따라야하는 단계입니다.
Step 1 - 각각의 클래스를 인스턴스화
두 클래스에서, 그것들을 초기화하는 데 사용할 수 생성자가 없습니다. 따라서, 우리는 정적 변수 사용하여 이러한 클래스의 개체를 만들 필요가 INSTANCE .
WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;
Step 2 - 문장을 토큰 화
이 두 클래스는 메소드 호출 포함 tokenize() . 이 방법은 문자열 형식의 원시 텍스트를 받아들입니다. 호출, 그것은 주어진 문자열을 토큰 화 및 문자열의 배열을 반환합니다 (tokens) .
문장은 USING 토큰 화 tokenizer() 아래와 같은 방법.
//Tokenizing the given sentence String tokens[] = tokenizer.tokenize(sentence) ;
Step 3 - 토큰을 인쇄
문장을 토큰 화 한 후 사용하여 토큰을 인쇄 할 수 있습니다 for loop 다음과 같이.
//Printing the tokens for(String token : tokens) System.out.println(token) ;
Example
다음은 사용 주어진 문장 토큰 화 프로그램입니다 WhitespaceTokenizer 클래스를. 이름으로 파일에이 프로그램을 저장 WhitespaceTokenizerExample.java .
import opennlp.tools.tokenize.WhitespaceTokenizer; public class WhitespaceTokenizerExample { public static void main(String args[]) { String sentence = "Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; //Instantiating whitespaceTokenizer class WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE; //Tokenizing the given paragraph String tokens[] = whitespaceTokenizer.tokenize(sentence) ; //Printing the tokens for(String token : tokens) System.out.println(token) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac WhitespaceTokenizerExample.java java WhitespaceTokenizerExample
실행에서, 상기 프로그램은 소정의 문자열 판독 (raw text) 를 토큰 화, 다음과 같은 결과를 표시한다.
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
TokenizerME 클래스
OpenNLP 또한 문장을 토큰 화하는 미리 정의 된 모델, 파일 이름을 드 token.bin를 사용합니다. 주어진 원시 텍스트로 문장을 토큰 화하는 훈련이다.
TokenizerME 의 클래스 opennlp.tools.tokenizer 패키지는이 모델을로드하고 OpenNLP 라이브러리를 사용하여 주어진 원시 텍스트를 토큰 화하는 데 사용됩니다. 이렇게하려면 다음을 수행해야합니다 -
-
부하 en-token.bin 은 Using 모델 TokenizerModel 클래스를.
-
이 instantiate TokenizerME 클래스를.
-
사용하여 문장 토큰 화 tokenize() 이 클래스의 방법을.
다음은 사용해, 지정된 원시 텍스트에서 문장 토큰 화 프로그램 작성 따라야하는 단계입니다 TokenizerME 클래스.
Step 1 - 모델로드
토큰 화를위한 모델의 이름은 클래스에 의해 표현된다 TokenizerModel 패키지에 속하는, opennlp.tools.tokenize .
토크 나이 모델을로드하려면 -
-
만들기 InputStream 모델의 개체를 (Instantiate the FileInputStream and pass the path of the model in String format to its constructor) .
-
이 instantiate TokenizerModel 클래스 및 전달 InputStream (object) 는 다음 코드 블록에 도시 된 바와 같이, 생성자 파라미터로서 모델을.
//Loading the Tokenizer model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin") ; TokenizerModel tokenModel = new TokenizerModel(inputStream) ;
Step 2 - TokenizerME 클래스를 인스턴스화
TokenizerME 패키지의 클래스 opennlp.tools.tokenize 작은 부분에 원시 텍스트 잘라하는 방법을 포함 (tokens) . 그것은 그것의 결정을 내릴 최대 엔트로피를 사용합니다.
이 클래스의 인스턴스를 아래와 같이 이전 단계에서 생성 된 모델 객체를 전달한다.
//Instantiating the TokenizerME class TokenizerME tokenizer = new TokenizerME(tokenModel) ;
Step 3 - 문장을 토큰 화
tokenize() 의 방법 TokenizerME 클래스는 전달 된 변환 텍스트를 토큰 화하는데 사용된다. 이 방법은 파라미터로서 문자열 변수를 수용하고, 문자열 배열 반환 (tokens) .
다음과 같이이 방법으로 문장의 문자열 형식을 전달하여,이 메소드를 호출합니다.
//Tokenizing the given raw text String tokens[] = tokenizer.tokenize(paragraph) ;
Example
다음은 주어진 원시 텍스트를 토큰 화 프로그램이다. 이름을 가진 파일이 프로그램을 저장 TokenizerMEExample.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; public class TokenizerMEExample { public static void main(String args[]) throws Exception{ String sentence = "Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; //Loading the Tokenizer model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin") ; TokenizerModel tokenModel = new TokenizerModel(inputStream) ; //Instantiating the TokenizerME class TokenizerME tokenizer = new TokenizerME(tokenModel) ; //Tokenizing the given raw text String tokens[] = tokenizer.tokenize(sentence) ; //Printing the tokens for (String a : tokens) System.out.println(a) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac TokenizerMEExample.java java TokenizerMEExample
실행에, 위의 프로그램은 주어진 문자열을 읽고 그 안에 문장을 감지하고 다음과 같은 출력을 표시합니다 -
Hi . How are you ? Welcome to Tutorialspoint . We provide free tutorials on various technologie
토큰의 위치를 가져 오는 중
우리는 또한 위치 또는 얻을 수 spans 은 Using 토큰의 tokenizePos() 메소드를. 이 패키지의 토크 나이 인터페이스의 방법이다 opennlp.tools.tokenize . 모든 때문에 (three) 토큰 화 클래스는이 인터페이스를 구현, 당신은 그들 모두에서이 방법을 찾을 수 있습니다.
이 방법은 문자열의 형태로 문장 또는 원시 텍스트를 받아들이고 유형의 객체의 배열 반환 Span .
당신은 사용하여 토큰의 위치를 얻을 수있다 tokenizePos() 다음과 같이 방법 -
//Retrieving the tokens tokenizer.tokenizePos(sentence) ;
인쇄 위치 (spans)
라는 이름의 클래스 Span 의 opennlp.tools.util 패키지 세트의 시작과 끝 정수를 저장하는 데 사용됩니다.
사용자는 리턴하여 스팬 저장할 수 tokenizePos() 스판 배열 방법을 다음 코드 블록에서와 같이, 그들을 출력한다.
//Retrieving the tokens Span[] tokens = tokenizer.tokenizePos(sentence) ; //Printing the spans of tokens for( Span token : tokens) System.out.println(token) ;
함께 인쇄 토큰과 자신의 위치
substring() String 클래스의 방법은 받아 begin 과 end 오프셋을하고 각각의 문자열을 반환합니다. 우리는 토큰 및 그 지속 기간이 인쇄 방법을 사용할 수있다 (positions) 는 다음 코드 블록에서와 같이, 서로.
//Printing the spans of tokens for(Span token : tokens) System.out.println(token +" "+sent.substring(token.getStart() , token.getEnd() ));
Example(SimpleTokenizer)
다음은 사용 원시 텍스트의 토큰 스팬 검색하는 프로그램입니다 SimpleTokenizer 클래스를. 또한 자신의 위치와 함께 토큰을 인쇄합니다. 라는 이름의 파일이 프로그램을 저장 SimpleTokenizerSpans.java .
import opennlp.tools.tokenize.SimpleTokenizer; import opennlp.tools.util.Span; public class SimpleTokenizerSpans { public static void main(String args[]) { String sent = "Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; //Instantiating SimpleTokenizer class SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE; //Retrieving the boundaries of the tokens Span[] tokens = simpleTokenizer.tokenizePos(sent) ; //Printing the spans of tokens for( Span token : tokens) System.out.println(token +" "+sent.substring(token.getStart() , token.getEnd() )); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac SimpleTokenizerSpans.java java SimpleTokenizerSpans
실행에서, 상기 프로그램은 소정의 문자열 판독 (raw text) 를 토큰 화, 다음 출력을 표시 -
[0..2) Hi [2..3) . [4..7) How [8..11) are [12..15) you [15..16) ? [17..24) Welcome [25..27) to [28..42) Tutorialspoint [42..43) . [44..46) We [47..54) provide [55..59) free [60..69) tutorials [70..72) on [73..80) various [81..93) technologies
Example (WhitespaceTokenizer)
다음은 사용 원시 텍스트의 토큰 스팬 검색하는 프로그램입니다 WhitespaceTokenizer 클래스를. 또한 자신의 위치와 함께 토큰을 인쇄합니다. 이름으로 파일에이 프로그램을 저장 WhitespaceTokenizerSpans.java .
import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.Span; public class WhitespaceTokenizerSpans { public static void main(String args[]) { String sent = "Hi. How are you? Welcome to Tutorialspoint. " + "We provide free tutorials on various technologies"; //Instantiating SimpleTokenizer class WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE; //Retrieving the tokens Span[] tokens = whitespaceTokenizer.tokenizePos(sent) ; //Printing the spans of tokens for( Span token : tokens) System.out.println(token +" "+sent.substring(token.getStart() , token.getEnd() )); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행
javac WhitespaceTokenizerSpans.java java WhitespaceTokenizerSpans
실행에서, 상기 프로그램은 소정의 문자열 판독 (raw text) 를 토큰 화, 다음과 같은 결과를 표시한다.
[0..3) Hi. [4..7) How [8..11) are [12..16) you? [17..24) Welcome [25..27) to [28..43) Tutorialspoint. [44..46) We [47..54) provide [55..59) free [60..69) tutorials [70..72) on [73..80) various [81..93) technologies
Example (TokenizerME)
다음은 사용 원시 텍스트의 토큰 스팬 검색하는 프로그램입니다 TokenizerME 클래스를. 또한 자신의 위치와 함께 토큰을 인쇄합니다. 이름을 가진 파일이 프로그램을 저장 TokenizerMESpans.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.Span; public class TokenizerMESpans { public static void main(String args[]) throws Exception{ String sent = "Hello John how are you welcome to Tutorialspoint"; //Loading the Tokenizer model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin") ; TokenizerModel tokenModel = new TokenizerModel(inputStream) ; //Instantiating the TokenizerME class TokenizerME tokenizer = new TokenizerME(tokenModel) ; //Retrieving the positions of the tokens Span tokens[] = tokenizer.tokenizePos(sent) ; //Printing the spans of tokens for(Span token : tokens) System.out.println(token +" "+sent.substring(token.getStart() , token.getEnd() )); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac TokenizerMESpans.java java TokenizerMESpans
실행에서, 상기 프로그램은 소정의 문자열 판독 (raw text) 를 토큰 화, 다음 출력을 표시 -
[0..5) Hello [6..10) John [11..14) how [15..18) are [19..22) you [23..30) welcome [31..33) to [34..48) Tutorialspoint
토크 나이 확률
getTokenProbabilities() TokenizerME 클래스의 방법은 가장 최근 통화와 관련된 확률 가져 오는 데 사용됩니다 tokenizePos() 메소드를.
//Getting the probabilities of the recent calls to tokenizePos() method double[] probs = detector.getSentenceProbabilities() ;
다음은에 대한 호출과 관련된 확률 인쇄 할 수있는 프로그램입니다 tokenizePos() 메소드를. 이름을 가진 파일이 프로그램을 저장 TokenizerMEProbs.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.Span; public class TokenizerMEProbs { public static void main(String args[]) throws Exception{ String sent = "Hello John how are you welcome to Tutorialspoint"; //Loading the Tokenizer model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin") ; TokenizerModel tokenModel = new TokenizerModel(inputStream) ; //Instantiating the TokenizerME class TokenizerME tokenizer = new TokenizerME(tokenModel) ; //Retrieving the positions of the tokens Span tokens[] = tokenizer.tokenizePos(sent) ; //Getting the probabilities of the recent calls to tokenizePos() method double[] probs = tokenizer.getTokenProbabilities() ; //Printing the spans of tokens for(Span token : tokens) System.out.println(token +" "+sent.substring(token.getStart() , token.getEnd() )); System.out.println(" ") ; for(int i = 0; i<probs.length; i++) System.out.println(probs[i]) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac TokenizerMEProbs.java java TokenizerMEProbs
실행에, 위의 프로그램은 주어진 문자열을 읽고 문장을 토큰 화하고이를 인쇄합니다. 또한, 그것은 또한 가장 최근 통화와 관련된 확률 반환 tokenizerPos() 메소드를.
[0..5) Hello [6..10) John [11..14) how [15..18) are [19..22) you [23..30) welcome [31..33) to [34..48) Tutorialspoint 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
OpenNLP - 엔티티 인식 명명
주어진 텍스트에서, 이름, 사람, 장소 및 기타 기관을 찾는 과정은 다음과 같이 알려져 N 아메드 E ntity의 R ecognition (NER) . 이 장에서는 OpenNLP 라이브러리를 사용하여 Java 프로그램을 통해 NER을 수행하는 방법에 대해 설명합니다.
엔티티 인식이 열려 NLP를 사용하여 명명
다양한 NER 작업을 수행하려면, OpenNLP 즉, en-nerdate.bn, EN-NER-location.bin, EN-NER-organization.bin, EN-NER-person.bin 및 EN-NER-시간을 미리 정의 된 다른 모델을 사용합니다. 큰 상자. 이러한 모든 파일은 주어진 원시 텍스트의 각 요소를 감지하는 훈련을 미리 정의 된 모델입니다.
opennlp.tools.namefind 패키지는 NER 작업을 수행하는 데 사용되는 클래스 및 인터페이스가 포함되어 있습니다. OpenNLP 라이브러리를 사용하여 NER 작업을 수행하려면 다음을 수행해야합니다 -
-
사용하여 각각의 모델로드 TokenNameFinderModel 클래스를.
-
이 instantiate NameFinder 클래스를.
-
이름을 찾아 그들을 인쇄 할 수 있습니다.
다음 주어진 원시 텍스트에서 이름 엔티티를 감지하는 프로그램을 작성하기 위해 따라야하는 단계입니다.
1 단계 : 모델을로드
문장 검출 모델의 이름은 클래스에 의해 표현된다 TokenNameFinderModel 패키지에 속하는, opennlp.tools.namefind .
NER 모델을로드하려면 -
-
만들기 InputStream 모델의 개체를 (Instantiate the FileInputStream and pass the path of the appropriate NER model in String format to its constructor) .
-
이 instantiate TokenNameFinderModel 클래스 및 전달 InputStream (object) 는 다음 코드 블록에 도시 된 바와 같이, 생성자 파라미터로서 모델을.
//Loading the NER-person model InputStream inputStreamNameFinder = new FileInputStream(".../en-nerperson.bin") ; TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder) ;
2 단계 : NameFinderME 클래스를 인스턴스화
NameFinderME 패키지의 클래스 opennlp.tools.namefind NER 작업을 수행하는 방법이 포함되어 있습니다. 이 클래스는 주어진 원시 텍스트로 명명 된 개체를 찾기 위해 최대 엔트로피 모델을 사용합니다.
이 클래스의 인스턴스를 아래와 같이 이전 단계에서 생성 된 모델 객체를 전달 -
//Instantiating the NameFinderME class NameFinderME nameFinder = new NameFinderME(model) ;
3 단계 : 문장에서 이름을 찾기
find() 의 방법 NameFinderME 클래스는 전달 된 원시 텍스트로 이름을 검색하는 데 사용됩니다. 이 방법은 매개 변수로 문자열 변수를 받아들입니다.
이 방법으로 문장의 문자열 형식을 전달하여,이 메소드를 호출합니다.
//Finding the names in the sentence Span nameSpans[] = nameFinder.find(sentence) ;
4 단계 : 문장에서 이름의 스팬 인쇄
find() 의 방법 NameFinderME 클래스는 유형 스팬의 객체의 배열을 반환합니다. 의 스팬라는 이름의 클래스 opennlp.tools.util 패키지는 저장하는 데 사용되는 start 과 end 집합의 정수를.
당신은에 의해 반환 된 스팬 저장할 수 있습니다 find() 스팬 배열 방법을 다음과 같은 코드 블록에서와 같이, 그것들을 인쇄 할 수 있습니다.
//Printing the sentences and their spans of a sentence for (Span span : spans) System.out.println(paragraph.substring(span) ;
NER Example
다음은 주어진 문장을 읽고 그 안에있는 사람의 이름의 스팬을 인식하는 프로그램입니다. 이름을 가진 파일이 프로그램을 저장 NameFinderME_Example.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.util.Span; public class NameFinderME_Example { public static void main(String args[]) throws Exception{ /Loading the NER - Person model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-ner-person.bin") ; TokenNameFinderModel model = new TokenNameFinderModel(inputStream) ; //Instantiating the NameFinder class NameFinderME nameFinder = new NameFinderME(model) ; //Getting the sentence in the form of String array String [] sentence = new String[]{ "Mike" , "and" , "Smith" , "are" , "good" , "friends" }; //Finding the names in the sentence Span nameSpans[] = nameFinder.find(sentence) ; //Printing the spans of the names in the sentence for(Span s: nameSpans) System.out.println(s.toString() ); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac NameFinderME_Example.java java NameFinderME_Example
실행에서, 상기 프로그램은 소정의 문자열 판독 (raw text) , 그 안에있는 사람들의 이름을 검출하고, 그 위치를 표시 (spans) 아래와 같이.
[0..1) person [2..3) person
자신의 포지션과 함께 이름
substring() String 클래스의 방법은 받아 begin 과 end offsets 하고 각각의 문자열을 반환합니다. 우리는 이름과 스팬 인쇄하려면이 방법을 사용할 수 있습니다 (positions) 다음 코드 블록에서와 같이, 함께.
for(Span s: nameSpans) System.out.println(s.toString() +" "+tokens[s.getStart() ]);
다음은 주어진 원시 텍스트에서 이름을 감지하고 자신의 위치와 함께이를 표시 할 수있는 프로그램입니다. 이름을 가진 파일이 프로그램을 저장 NameFinderSentences.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.Span; public class NameFinderSentences { public static void main(String args[]) throws Exception{ //Loading the tokenizer model InputStream inputStreamTokenizer = new FileInputStream("C:/OpenNLP_models/entoken.bin") ; TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer) ; //Instantiating the TokenizerME class TokenizerME tokenizer = new TokenizerME(tokenModel) ; //Tokenizing the sentence in to a string array String sentence = "Mike is senior programming manager and Rama is a clerk both are working at Tutorialspoint"; String tokens[] = tokenizer.tokenize(sentence) ; //Loading the NER-person model InputStream inputStreamNameFinder = new FileInputStream("C:/OpenNLP_models/enner-person.bin") ; TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder) ; //Instantiating the NameFinderME class NameFinderME nameFinder = new NameFinderME(model) ; //Finding the names in the sentence Span nameSpans[] = nameFinder.find(tokens) ; //Printing the names and their spans in a sentence for(Span s: nameSpans) System.out.println(s.toString() +" "+tokens[s.getStart() ]); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac NameFinderSentences.java java NameFinderSentences
실행에서, 상기 프로그램은 소정의 문자열 판독 (raw text) , 그 안에있는 사람들의 이름을 검출하고, 그 위치를 표시 (spans) 아래와 같이.
[0..1) person Mike
위치의 이름을 찾기
다양한 모델을로드하여 다양한라는 이름의 실체를 감지 할 수 있습니다. 다음은로드하는 자바 프로그램이다 en-ner-location.bin 모델을 주어진 문장의 위치 이름을 검색합니다. 이름을 가진 파일이 프로그램을 저장 LocationFinder.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.Span; public class LocationFinder { public static void main(String args[]) throws Exception{ InputStream inputStreamTokenizer = new FileInputStream("C:/OpenNLP_models/entoken.bin") ; TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer) ; //String paragraph = "Mike and Smith are classmates"; String paragraph = "Tutorialspoint is located in Hyderabad"; //Instantiating the TokenizerME class TokenizerME tokenizer = new TokenizerME(tokenModel) ; String tokens[] = tokenizer.tokenize(paragraph) ; //Loading the NER-location moodel InputStream inputStreamNameFinder = new FileInputStream("C:/OpenNLP_models/en- ner-location.bin") ; TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder) ; //Instantiating the NameFinderME class NameFinderME nameFinder = new NameFinderME(model) ; //Finding the names of a location Span nameSpans[] = nameFinder.find(tokens) ; //Printing the spans of the locations in the sentence for(Span s: nameSpans) System.out.println(s.toString() +" "+tokens[s.getStart() ]); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac LocationFinder.java java LocationFinder
실행에서, 상기 프로그램은 소정의 문자열 판독 (raw text) , 그 안에있는 사람들의 이름을 검출하고, 그 위치를 표시 (spans) 아래와 같이.
[4..5) location Hyderabad
NameFinder에서 확률
probs() 의 방법 NameFinderME 클래스의 마지막 복호화 순서의 확률을 얻기 위해 사용된다.
double[] probs = nameFinder.probs() ;
다음은 확률을 인쇄 할 수있는 프로그램입니다. 이름을 가진 파일이 프로그램을 저장 TokenizerMEProbs.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.Span; public class TokenizerMEProbs { public static void main(String args[]) throws Exception{ String sent = "Hello John how are you welcome to Tutorialspoint"; //Loading the Tokenizer model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin") ; TokenizerModel tokenModel = new TokenizerModel(inputStream) ; //Instantiating the TokenizerME class TokenizerME tokenizer = new TokenizerME(tokenModel) ; //Retrieving the positions of the tokens Span tokens[] = tokenizer.tokenizePos(sent) ; //Getting the probabilities of the recent calls to tokenizePos() method double[] probs = tokenizer.getTokenProbabilities() ; //Printing the spans of tokens for( Span token : tokens) System.out.println(token +" "+sent.substring(token.getStart() , token.getEnd() )); System.out.println(" ") ; for(int i = 0; i<probs.length; i++) System.out.println(probs[i]) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac TokenizerMEProbs.java java TokenizerMEProbs
실행에, 위의 프로그램은, 지정된 String를 읽고 문장을 토큰 화하고이를 인쇄합니다. 아래와 같이 또한, 또한, 마지막 디코딩 된 시퀀스의 확률을 돌려 준다.
[0..5) Hello [6..10) John [11..14) how [15..18) are [19..22) you [23..30) welcome [31..33) to [34..48) Tutorialspoint 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
OpenNLP은 - 품사 찾기
OpenNLP를 사용하여, 당신은 또한 주어진 문장의 음성의 부품을 감지하고 인쇄 할 수 있습니다. 대신 품사의 이름으로, OpenNLP 음성의 각 부분의 짧은 형태를 사용합니다. 다음 표는 OpenNLP와 그 의미에 의해 감지 연설의 여러 부분을 나타냅니다.
품사 | 품사의 의미 |
---|---|
NN | 명사, 단수 또는 대량 |
DT | 결정 |
VB | 동사, 기본 양식 |
VBD | 동사 과거 시제 |
VBZ | 동사 제삼자 단수 본 |
에서 | 전치사 또는 종속 연계 |
NNP | 고유 명사, 단수 |
에 | 에 |
JJ | 형용사 |
음성의 부품 태그
문장의 품사에 태그를 OpenNLP는 모델이라는 파일 사용 en-posmaxent.bin . 이것은 주어진 원시 텍스트의 품사 태그를 훈련하는 미리 정의 된 모델이다.
POSTaggerME 의 클래스 opennlp.tools.postag 패키지는이 모델을로드하고 OpenNLP 라이브러리를 사용하여 주어진 원시 텍스트의 품사 태그를 사용한다. 이렇게하려면 다음을 수행해야합니다 -
-
부하 en-pos-maxent.bin 은 Using 모델 POSModel 클래스를.
-
이 instantiate POSTaggerME 클래스를.
-
문장을 토큰 화.
-
사용하여 태그 생성 tag() 메소드를.
-
사용하여 토큰 및 태그 인쇄 POSSample 클래스를.
다음은 사용해, 지정된 원시 텍스트의 품사 태그 프로그램 작성 따라야하는 단계입니다 POSTaggerME 클래스.
1 단계 : 모델을로드
POS 태그에 대한 모델의 이름은 클래스에 의해 표현된다 POSModel 패키지에 속하는, opennlp.tools.postag .
토크 나이 모델을로드하려면 -
-
만들기 InputStream 모델의 개체를 (Instantiate the FileInputStream and pass the path of the model in String format to its constructor) .
-
이 instantiate POSModel 클래스 및 전달 InputStream (object) 는 다음 코드 블록에 도시 된 바와 같이, 생성자 파라미터로서 모델을 -
//Loading Parts of speech-maxent model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin") ; POSModel model = new POSModel(inputStream) ;
2 단계 : POSTaggerME 클래스를 인스턴스화
POSTaggerME 패키지의 클래스 opennlp.tools.postag 주어진 원시 텍스트의 연설의 일부를 예측하는 데 사용됩니다. 그것은 그것의 결정을 내릴 최대 엔트로피를 사용합니다.
아래에 도시 된 바와 같이,이 클래스의 인스턴스와 이전 단계에서 생성 된 모델 객체를 전달 -
//Instantiating POSTaggerME class POSTaggerME tagger = new POSTaggerME(model) ;
3 단계 : 문장을 토큰 화
tokenize() 의 방법 whitespaceTokenizer 클래스는 전달 된 변환 텍스트를 토큰 화하는데 사용된다. 이 방법은 파라미터로서 문자열 변수를 수용하고, 문자열 배열 반환 (tokens) .
이 instantiate whitespaceTokenizer 이 방법으로 문장의 문자열 형식을 전달하여 클래스와 호출이 방법을.
//Tokenizing the sentence using WhitespaceTokenizer class WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence) ;
4 단계 : 태그를 생성
tag() 의 방법 whitespaceTokenizer 클래스는 토큰의 문장에 POS 태그를 지정합니다. 이 방법은 토큰의 배열 수용 (String) 파라미터 및 반환 태그와 (array) .
인보 tag() 그것을 이전 단계에서 생성 된 토큰을 전달하여 방법.
//Generating tags String[] tags = tagger.tag(tokens) ;
5 단계 : 토큰 및 태그 인쇄
POSSample 클래스는 POS-태그 문장을 나타냅니다. 이 클래스를 인스턴스화하기 위해, 우리는 토큰의 배열을 필요로 (of the text) 와 태그의 배열을.
toString() 이 클래스의 메소드는 태그 문장을 반환합니다. 토큰 및 이전 단계에서 생성 된 태그 어레이를 전달하여,이 클래스의 인스턴스를 호출하여 그 toString() 는 다음 코드 블록에서와 같이, 방법.
//Instantiating the POSSample class POSSample sample = new POSSample(tokens, tags) ; System.out.println(sample.toString() );
Example
다음은 주어진 원시 텍스트에 품사 태그 프로그램입니다. 이름을 가진 파일이 프로그램을 저장 PosTaggerExample.java.
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; public class PosTaggerExample { public static void main(String args[]) throws Exception{ //Loading Parts of speech-maxent model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin") ; POSModel model = new POSModel(inputStream) ; //Instantiating POSTaggerME class POSTaggerME tagger = new POSTaggerME(model) ; String sentence = "Hi welcome to Tutorialspoint"; //Tokenizing the sentence using WhitespaceTokenizer class WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence) ; //Generating tags String[] tags = tagger.tag(tokens) ; //Instantiating the POSSample class POSSample sample = new POSSample(tokens, tags) ; System.out.println(sample.toString() ); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac PosTaggerExample.java java PosTaggerExample
아래와 같이 실행에서, 상기 프로그램은, 소정의 텍스트를 판독하고이 문장의 품사를 검출하고,이를 표시한다.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
POS 술래 실적
다음은 주어진 원시 텍스트의 품사 태그 프로그램입니다. 또한 성능을 모니터링하고 술래의 성능을 표시합니다. 이름을 가진 파일이 프로그램을 저장 PosTagger_Performance.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; public class PosTagger_Performance { public static void main(String args[]) throws Exception{ //Loading Parts of speech-maxent model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin") ; POSModel model = new POSModel(inputStream) ; //Creating an object of WhitespaceTokenizer class WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; //Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; String[] tokens = whitespaceTokenizer.tokenize(sentence) ; //Instantiating POSTaggerME class POSTaggerME tagger = new POSTaggerME(model) ; //Generating tags String[] tags = tagger.tag(tokens) ; //Instantiating POSSample class POSSample sample = new POSSample(tokens, tags) ; System.out.println(sample.toString() ); //Monitoring the performance of POS tagger PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent") ; perfMon.start() ; perfMon.incrementCounter() ; perfMon.stopAndPrintFinalResult() ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac PosTaggerExample.java java PosTaggerExample
실행에, 위의 프로그램은 주어진 텍스트를 읽고 다음 문장의 품사 태그 및 표시합니다. 또한,도 POS 술래의 성능을 모니터하고 표시한다.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB Average: 0.0 sent/s Total: 1 sent Runtime: 0.0s
POS 술래 확률
probs() 의 방법 POSTaggerME 클래스는 최근 태그 문장의 각 태그의 확률을 찾는 데 사용됩니다.
//Getting the probabilities of the recent calls to tokenizePos() method double[] probs = detector.getSentenceProbabilities() ;
다음은 지난 태그 문장의 각 태그의 확률을 표시하는 프로그램입니다. 이름을 가진 파일이 프로그램을 저장 PosTaggerProbs.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; public class PosTaggerProbs { public static void main(String args[]) throws Exception{ //Loading Parts of speech-maxent model InputStream inputStream = new FileInputStream("C:/OpenNLP_mdl/en-pos-maxent.bin") ; POSModel model = new POSModel(inputStream) ; //Creating an object of WhitespaceTokenizer class WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; //Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; String[] tokens = whitespaceTokenizer.tokenize(sentence) ; //Instantiating POSTaggerME class POSTaggerME tagger = new POSTaggerME(model) ; //Generating tags String[] tags = tagger.tag(tokens) ; //Instantiating the POSSample class POSSample sample = new POSSample(tokens, tags) ; System.out.println(sample.toString() ); //Probabilities for each tag of the last tagged sentence. double [] probs = tagger.probs() ; System.out.println(" ") ; //Printing the probabilities for(int i = 0; i<probs.length; i++) System.out.println(probs[i]) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac TokenizerMEProbs.java java TokenizerMEProbs
실행에, 위의 프로그램은, 주어진 원시 텍스트를 읽고 그 안에 각 토큰의 품사 태그 및 표시합니다. 아래와 같이 또한, 또한, 주어진 문장에서 스피치의 각 부분에 대한 확률을 표시한다.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB 0.6416834779738033 0.42983612874819177 0.8584513635863117 0.4394784478206072
OpenNLP 일 - 문장 구문 분석
OpenNLP API를 사용하면 주어진 문장을 구문 분석 할 수 있습니다. 이 장에서는 OpenNLP API를 사용하여 원시 텍스트를 구문 분석하는 방법을 설명합니다.
OpenNLP 라이브러리를 사용하여 원시 텍스트를 구문 분석
문장을 검색하려면, OpenNLP는 미리 정의 된 모델이라는 파일 사용 en-parserchunking.bin . 이것은 주어진 원시 텍스트를 구문 분석하는 훈련을하는 미리 정의 된 모델이다.
Parser 의 클래스 opennlp.tools.Parser 패키지는 구문 분석 성분을 보유하는 데 사용되며, ParserTool 의 클래스 opennlp.tools.cmdline.parser 패키지 내용을 구문 분석하는 데 사용됩니다.
다음은 사용해, 지정된 원시 텍스트 구문 분석하는 프로그램 작성 따라야하는 단계입니다 ParserTool 클래스.
1 단계 : 모델을로드
구문 분석 텍스트 모델의 이름은 클래스에 의해 표현된다 ParserModel 패키지에 속하는, opennlp.tools.parser .
토크 나이 모델을로드하려면 -
-
만들기 InputStream 모델의 개체를 (Instantiate the FileInputStream and pass the path of the model in String format to its constructor) .
-
이 instantiate ParserModel 클래스 및 전달 InputStream (object) 는 다음 코드 블록에 도시 된 바와 같이, 생성자 파라미터로서 모델을.
//Loading parser model InputStream inputStream = new FileInputStream(".../en-parserchunking.bin") ; ParserModel model = new ParserModel(inputStream) ;
2 단계 : 파서 클래스의 객체를 생성
Parser 패키지의 클래스 opennlp.tools.parser 구문 분석 성분을 유지하기위한 데이터 구조를 나타냅니다. 당신은 정적 사용하여이 클래스의 객체 생성 할 수 있습니다 create() 의 방법 ParserFactory 클래스를.
인보 create() 의 방법 ParserFactory 아래와 같이 이전 단계에서 생성 된 모델 객체를 전달하여 -
//Creating a parser Parser parser = ParserFactory.create(model) ;
3 단계 : 문장을 구문 분석
parseLine() 의 방법 ParserTool 클래스 OpenNLP에서 원시 텍스트를 해석하는데 사용된다. 이 방법은 받아 -
-
텍스트를 나타내는 String 변수를 구문 분석합니다.
-
파서 객체입니다.
-
파싱의 수를 나타내는 정수를 실시하여야한다.
문장 다음과 같은 파라미터를 전달하여,이 메소드를 호출 : 이전 단계에서 생성 된 파싱 개체를 파싱 필요한 수를 나타내는 정수를 실시한다.
//Parsing the sentence String sentence = "Tutorialspoint is the largest tutorial library."; Parse topParses[] = ParserTool.parseLine(sentence, parser, 1) ;
Example
다음은 주어진 원시 텍스트를 구문 분석하는 프로그램입니다. 이름을 가진 파일이 프로그램을 저장 ParserExample.java .
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.cmdline.parser.ParserTool; import opennlp.tools.parser.Parse; import opennlp.tools.parser.Parser; import opennlp.tools.parser.ParserFactory; import opennlp.tools.parser.ParserModel; public class ParserExample { public static void main(String args[]) throws Exception{ //Loading parser model InputStream inputStream = new FileInputStream(".../en-parserchunking.bin") ; ParserModel model = new ParserModel(inputStream) ; //Creating a parser Parser parser = ParserFactory.create(model) ; //Parsing the sentence String sentence = "Tutorialspoint is the largest tutorial library."; Parse topParses[] = ParserTool.parseLine(sentence, parser, 1) ; for (Parse p : topParses) p.show() ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac ParserExample.java java ParserExample
실행에서, 상기 프로그램은, 소정의 텍스트를 판독 원료를 구문 분석하고, 다음 출력을 표시 -
(TOP (S (NP (NN Tutorialspoint) ) (VP (VBZ is) (NP (DT the) (JJS largest) (NN tutorial) (NN library.) ))))
OpenNLP - 청크 문장
문장 청킹 / 차단 워드 그룹과 동사의 그룹과 같은 단어의 부분으로 문장을 분할을 의미합니다.
OpenNLP를 사용하여 문장을 청크
문장을 검색하려면, OpenNLP는 모델이라는 파일 사용 en-chunker.bin . 이것은 주어진 원시 텍스트 덩어리로 문장을 훈련하는 미리 정의 된 모델이다.
opennlp.tools.chunker 패키지에는 명사구 덩어리로 비 재귀 구문 주석을 찾기 위해 사용되는 클래스 및 인터페이스가 포함되어 있습니다.
당신은 덩어리 메소드를 사용하여 문장 수있는 chunk() 의 ChunkerME 클래스를. 이 방법은 매개 변수로 문장의 토큰 및 POS 태그를 사용할 수 있습니다. 따라서, 청크의 프로세스를 시작하기 전에, 우선 당신은 문장을 토큰 화와 그것의 부품 POS 태그를 생성해야합니다.
OpenNLP 라이브러리를 사용하여 문장 덩어리하려면 다음을 수행해야합니다 -
-
문장을 토큰 화.
-
그것을 위해 POS 태그를 생성합니다.
-
부하 en-chunker.bin 사용하여 모델 ChunkerModel 클래스
-
이 instantiate ChunkerME 클래스를.
-
청크 사용하여 문장 chunk() 이 클래스의 방법을.
다음 주어진 원시 텍스트에서 청크 문장에 프로그램을 작성하기 위해 따라야하는 단계입니다.
1 단계 : 문장을 토큰 화
문장은 USING 토큰 화 tokenize() 의 방법 whitespaceTokenizer 다음 코드 블록에 도시 된 바와 같이, 클래스.
//Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence) ;
2 단계 : POS 태그를 생성
사용하여 문장의 POS 태그 생성 tag() 의 방법 POSTaggerME 다음 코드 블록에서와 같이 클래스를.
//Generating the POS tags File file = new File("C:/OpenNLP_models/en-pos-maxent.bin") ; POSModel model = new POSModelLoader() .load(file); //Constructing the tagger POSTaggerME tagger = new POSTaggerME(model) ; //Generating tags from the tokens String[] tags = tagger.tag(tokens) ;
3 단계 : 모델을로드
문장을 청크 모델의 이름은 클래스에 의해 표현된다 ChunkerModel 패키지에 속하는, opennlp.tools.chunker .
문장 탐지 모델을로드하려면 -
-
만들기 InputStream 모델의 개체를 (Instantiate the FileInputStream and pass the path of the model in String format to its constructor) .
-
이 instantiate ChunkerModel 클래스 및 전달 InputStream (object) 는 다음 코드 블록에 도시 된 바와 같이, 생성자 파라미터로서 모델을 -
//Loading the chunker model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin") ; ChunkerModel chunkerModel = new ChunkerModel(inputStream) ;
4 단계 : chunkerME 클래스를 인스턴스화
chunkerME 패키지의 클래스 opennlp.tools.chunker 문장 덩어리에 메서드가 포함되어 있습니다. 이것은 최대 엔트로피 기반 chunker입니다.
이 클래스의 인스턴스를 생성하고 이전 단계에서 만든 모델 객체를 전달합니다.
//Instantiate the ChunkerME class ChunkerME chunkerME = new ChunkerME(chunkerModel) ;
5 단계 : 문장 청킹
chunk() 의 방법 ChunkerME 클래스는 전달 된 원시 텍스트 덩어리로 문장을 사용한다. 이 방법은 매개 변수로 토큰 및 태그를 나타내는 두 개의 문자열 배열을 받아들입니다.
파라미터로서 이전 단계에서 생성 된 토큰 어레이 및 태그 어레이를 통과시킴으로써이 방법을 호출한다.
//Generating the chunks String result[] = chunkerME.chunk(tokens, tags) ;
Example
청크 프로그램 주어진 원시 텍스트의 문장입니다 다음. 이름을 가진 파일이 프로그램을 저장 ChunkerExample.java .
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.postag.POSModelLoader; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; public class ChunkerExample{ public static void main(String args[]) throws IOException { //Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence) ; //Generating the POS tags //Load the parts of speech model File file = new File("C:/OpenNLP_models/en-pos-maxent.bin") ; POSModel model = new POSModelLoader() .load(file); //Constructing the tagger POSTaggerME tagger = new POSTaggerME(model) ; //Generating tags from the tokens String[] tags = tagger.tag(tokens) ; //Loading the chunker model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin") ; ChunkerModel chunkerModel = new ChunkerModel(inputStream) ; //Instantiate the ChunkerME class ChunkerME chunkerME = new ChunkerME(chunkerModel) ; //Generating the chunks String result[] = chunkerME.chunk(tokens, tags) ; for (String s : result) System.out.println(s) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac ChunkerExample.java java ChunkerExample
실행에, 위의 프로그램은 주어진 문자열을 읽고 그 안에 문장을 덩어리 아래와 같이 표시합니다.
Loading POS Tagger model ... done (1.040s) B-NP I-NP B-VP I-VP
토큰의 위치를 검출
우리는 또한 사용 청크의 위치 또는 스팬 검출 할 chunkAsSpans() 의 방법 ChunkerME 클래스. 이 방법은 유형 스팬의 객체의 배열을 반환합니다. 의 스팬라는 이름의 클래스 opennlp.tools.util 패키지는 저장하는 데 사용되는 start 과 end 집합의 정수를.
사용자는 리턴 의해 스팬 저장할 수 chunkAsSpans() 스판 배열 방법을 다음 코드 블록에서와 같이, 그들을 출력한다.
//Generating the tagged chunk spans Span[] span = chunkerME.chunkAsSpans(tokens, tags) ; for (Span s : span) System.out.println(s.toString() );
Example
다음은 주어진 원시 텍스트의 문장을 감지 프로그램입니다. 이름을 가진 파일이 프로그램을 저장 ChunkerSpansEample.java .
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.postag.POSModelLoader; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.Span; public class ChunkerSpansEample{ public static void main(String args[]) throws IOException { //Load the parts of speech model File file = new File("C:/OpenNLP_models/en-pos-maxent.bin") ; POSModel model = new POSModelLoader() .load(file); //Constructing the tagger POSTaggerME tagger = new POSTaggerME(model) ; //Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence) ; //Generating tags from the tokens String[] tags = tagger.tag(tokens) ; //Loading the chunker model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin") ; ChunkerModel chunkerModel = new ChunkerModel(inputStream) ; ChunkerME chunkerME = new ChunkerME(chunkerModel) ; //Generating the tagged chunk spans Span[] span = chunkerME.chunkAsSpans(tokens, tags) ; for (Span s : span) System.out.println(s.toString() ); } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac ChunkerSpansEample.java java ChunkerSpansEample
실행에서, 상기 프로그램은 상기 소정의 문자열과 청크의 지속 기간을 판독하고, 다음 출력을 표시 -
Loading POS Tagger model ... done (1.059s) [0..2) NP [2..4) VP
Chunker 확률 감지
probs() 의 방법 ChunkerME 클래스의 마지막 복호화 순서의 확률을 돌려 준다.
//Getting the probabilities of the last decoded sequence double[] probs = chunkerME.probs() ;
다음은에 의해 마지막 디코딩 시퀀스의 확률을 인쇄 할 수있는 프로그램입니다 chunker . 이름을 가진 파일이 프로그램을 저장 ChunkerProbsExample.java .
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.postag.POSModelLoader; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; public class ChunkerProbsExample{ public static void main(String args[]) throws IOException { //Load the parts of speech model File file = new File("C:/OpenNLP_models/en-pos-maxent.bin") ; POSModel model = new POSModelLoader() .load(file); //Constructing the tagger POSTaggerME tagger = new POSTaggerME(model) ; //Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence) ; //Generating tags from the tokens String[] tags = tagger.tag(tokens) ; //Loading the chunker model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin") ; ChunkerModel cModel = new ChunkerModel(inputStream) ; ChunkerME chunkerME = new ChunkerME(cModel) ; //Generating the chunk tags chunkerME.chunk(tokens, tags) ; //Getting the probabilities of the last decoded sequence double[] probs = chunkerME.probs() ; for(int i = 0; i<probs.length; i++) System.out.println(probs[i]) ; } }
컴파일하고 다음 명령을 사용하여 명령 프롬프트에서 저장 한 자바 파일을 실행 -
javac ChunkerProbsExample.java java ChunkerProbsExample
실행에서, 전술 한 프로그램을 청크 지정된 문자열을 판독하고, 마지막 디코딩 된 시퀀스의 확률을 출력한다.
0.9592746040797778 0.6883933131241501 0.8830563473996004 0.8951150529746051
OpenNLP - 명령 행 인터페이스
OpenNLP는 명령 줄 인터페이스 제공 (CLI) 명령 줄을 통해 다른 작업을 수행 할 수 있습니다. 이 장에서, 우리는 우리가 OpenNLP 명령 줄 인터페이스를 사용하는 방법을 보여주기 위해 몇 가지 예를 취할 것입니다.
토큰 화
input.txt를
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
통사론
> opennlp TokenizerME path_for_models../en-token.bin <inputfile..> outputfile..
명령
C:\> opennlp TokenizerME C:\OpenNLP_models/en-token.bin <input.txt >output.txt
산출
Loading Tokenizer model ... done (0.207s) Average: 214.3 sent/s Total: 3 sent Runtime: 0.014s
경우 output.txt
Hi . How are you ? Welcome to Tutorialspoint . We provide free tutorials on various technologies
문장 감지
input.txt를
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
통사론
> opennlp SentenceDetector path_for_models../en-token.bin <inputfile..> outputfile..
명령
C:\> opennlp SentenceDetector C:\OpenNLP_models/en-sent.bin <input.txt > output_sendet.txt
산출
Loading Sentence Detector model ... done (0.067s) Average: 750.0 sent/s Total: 3 sent Runtime: 0.004s
Output_sendet.txt
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
엔티티 인식 명명
input.txt를
<START:person> <START:person> Mike <END> <END> is senior programming manager and <START:person> Rama <END> is a clerk both are working at Tutorialspoint
통사론
> opennlp TokenNameFinder path_for_models../en-token.bin <inputfile..
명령
C:\>opennlp TokenNameFinder C:\OpenNLP_models\en-ner-person.bin <input_namefinder.txt
산출
Loading Token Name Finder model ... done (0.730s) <START:person> <START:person> Mike <END> <END> is senior programming manager and <START:person> Rama <END> is a clerk both are working at Tutorialspoint Average: 55.6 sent/s Total: 1 sent Runtime: 0.018s
음성 태그의 일부
input.txt를
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
통사론
> opennlp POSTagger path_for_models../en-token.bin <inputfile..
명령
C:\>opennlp POSTagger C:\OpenNLP_models/en-pos-maxent.bin < input.txt
산출
Loading POS Tagger model ... done (1.315s) Hi._NNP How_WRB are_VBP you?_JJ Welcome_NNP to_TO Tutorialspoint._NNP We_PRP provide_VBP free_JJ tutorials_NNS on_IN various_JJ technologies_NNS Average: 66.7 sent/s Total: 1 sent Runtime: 0.015s
[출처] http://www.w3ii.com/ko/opennlp/opennlp_quick_guide.html
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.