강력한 RegexNER를 찾았고 Stanford CoreNLP 의 Superset TokensRegex 입니다.
제목이
"g. Meho Mehic"또는 "gdin. N. Neko"(g. 및 gdin.은 Mr.의 경우 Bosnian의 약어입니다) 와 같이 제목이있는 PERSON의 패턴과 같이 나에게 좋은 결과를 제공해야하는 몇 가지 규칙이 있습니다.
기존 토크 나이저에 문제가 있습니다. 예를 들어 토큰 "g"와 같이 일부 문자열을 두 개의 토큰으로 분리하고 일부는 하나로 분리합니다. 단어 <word>g.</word>
와 토큰 "gdin"으로 남습니다. 두 개의 토큰으로 분할됩니다 : <word>gdin</word>
및 <word>.</word>
.
이로 인해 정규식에 문제가 발생합니다. 단일 토큰 및 다중 토큰 케이스를 처리해야합니다 (두 개의 "아마도 점"에주의), RegexNER 예제 :
( /g\.?|gdin\.?/ /\./? ([{ word:/[A-Z][a-z]*\.?/ }]+) ) PERSON
또한 이로 인해 문장 분할과 관련된 또 다른 문제가 발생합니다. 일부 문장이 잘 인식되지 않아 정규식이 실패합니다 ... 예를 들어 문장에 "gdin"이 포함 된 경우. 두 개로 분할되므로 점이 (존재하지 않는) 문장을 끝냅니다. 지금은 이것을 우회 할 수있었습니다 ssplit.isOneSentence = true
.
질문 :
Ok 나는 이것에 대해 잠시 생각했고 실제로 당신의 경우에 대해 꽤 솔직한 것을 생각할 수 있습니다. 할 수있는 한 가지는 토크 나이저의 제목 목록에 "gdin"을 추가하는 것입니다.
토크 나이저 규칙은 edu.stanford.nlp.process.PTBLexer.flex에 있습니다 (741 행 참조).
나는 토크 나이저를 잘 이해하지 못하지만 거기에 직함 목록이 분명히 있으므로 기간이 분리되지 않는 경우 일 것입니다.
물론이를 위해서는 Stanford CoreNLP의 사용자 지정 빌드로 작업해야합니다.
GitHub : https://github.com/stanfordnlp/CoreNLP 에서 전체 코드를 얻을 수 있습니다.
모든 주요 Stanford CoreNLP 클래스로 jar를 빌드하기위한 기본 페이지에 지침이 있습니다. ant 프로세스를 실행하면 PTBLexer.flex를 기반으로 새로운 PTBLexer.java가 자동으로 생성됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다