lemminflect영어 레마 화 및 변곡을위한 파이썬 모듈.
Lemminflect는 사전 접근 방식을 사용하여 영어 단어를 lemmatting하고 사용자가 제공 한 범용 종속성 또는 Penn TreeBank 태그에 의해 지정된 형태로 이들을 수 있습니다. 라이브러리는 단어 형식을 분류하고 적절한 모핑 규칙을 선택하기 위해 신경망 기술을 적용하여 비정규 외 (OOV) 단어와 함께 작동합니다.
이 시스템은 독립형 모듈 또는 스파크 NLP 시스템의 확장 역할을합니다.
사전 및 형태 규칙은 영어 단어 형식에 대한 광범위한 세트 정보를 포함하는 NIH의 전문 사전에서 파생됩니다.
보다 단순한 변곡 전용 시스템은 pyinflect로 제공됩니다. Lemminflect는 해당 프로젝트의 단점 중 일부를 해결하고 ...와 같은 기능을 추가하기 위해 만들어졌습니다.
최신 문서는 readthedocs를 참조하십시오.
Lemminflect 및 기타 인기있는 NLP 유틸리티의 정확도는 자동으로 생성 된 변곡 데이터베이스 (AGID)를 기준선으로 사용하여 테스트되었습니다. 이것은 "금"표준 데이터 세트가 아니지만 광범위한 레마 목록과 해당 변곡 목록이 있으며 테스트를위한 "좋은"세트로 보입니다. 각 변곡은 테스트 소프트웨어에 의해 정리 된 다음 코퍼스의 원래 값과 비교되었습니다. 테스트에는 119,194 개의 다른 감염된 단어가 포함되었습니다.
| Package | Verb | Noun | ADJ/ADV | Overall | Speed |
|-----------------------------------------------------------------------------|
| LemmInflect 0.2.3 | 96.1% | 95.4% | 93.9% | 95.6% | 42.0 uS |
| Stanza 1.5.0 + CoreNLP 4.5.4 | 94.0% | 96.4% | 93.1% | 95.5% | 30.0 us |
| spaCy 3.5.0 | 79.5% | 88.9% | 60.5% | 84.7% | 393.0 uS |
| NLTK 3.8.1 | 53.3% | 52.2% | 53.3% | 52.6% | 12.0 uS |
|-----------------------------------------------------------------------------|
속도는 Lemma 당 마이크로 초이며 I9-7940X CPU에서 수행되었습니다. Stanza는 Java Corenlp 소프트웨어를 호출하고 있기 때문에 120k 테스트 사례가 모두 단일 통화로 그룹화되었습니다. Spacy의 경우 Lemmatizer를 제외한 모든 파이프 라인 구성 요소가 비활성화되었습니다. 레마 당 높은 시간은 아마도 파이프 라인 아키텍처의 일반적인 오버 헤드를 반영한 것입니다.
Lemminflect를 실행하기위한 유일한 외부 요구 사항은 numpy 이며 신경망을 구동하는 매트릭스 수학에 사용됩니다. 이 그물은 비교적 작으며 실행하는 데 상당한 CPU 전력이 필요하지 않습니다.
설치하려면 ..
pip3 install lemminflect
이 프로젝트는 Python 3과 Ubuntu에서 구축 및 테스트되었지만 Linux, Windows, Mac 등 모든 시스템에서 실행해야합니다. Python 2에서 테스트되지 않지만 변경 사항이 최소화되거나 변경되지 않으면 해당 환경에서 기능 할 수 있습니다.
코드 기반에는 다양한 데이터 파일과 신경망을 생성하기위한 라이브러리 기능 및 스크립트도 포함되어 있습니다. 여기에는 ...과 같은 것들이 포함됩니다.
이들 중 어느 것도 런타임 작동에 필요하지 않습니다. 그러나 시스템을 수정하려면 자세한 내용은 문서를 참조하십시오.
단어를 lemmatize하려면 방법 getLemma() 사용하십시오. 이것은 단어와 보편적 의존성 태그를 취하고 가능한 철자 목록으로 렘마를 반환합니다. 사전 시스템이 먼저 사용되며 레마가 발견되지 않으면 규칙 시스템이 사용됩니다.
> from lemminflect import getLemma
getLemma('watches', upos='VERB')
('watch',)
단어를 입력하려면 getInflection 방법을 사용하십시오. 이것은 레마와 펜 트리 뱅크 태그를 사용하고 해당 태그와 관련된 특정 변곡의 튜플을 반환합니다. 위의 사전에서 사전은 먼저 사용되며 필요한 경우 변동 규칙이 적용됩니다.
> from lemminflect import getInflection
> getInflection('watch', tag='VBD')
('watched',)
> getInflection('xxwatch', tag='VBD')
('xxwatched',)
라이브러리는 사전 및 OOV 규칙에 직접 액세스하기 위해 하위 수준의 기능을 제공합니다. 자세한 설명은 Lemmatizer 또는 변곡을 참조하십시오.
확장자로 사용하려면 스파이 버전 2.0 이상이 필요합니다. 버전 1.9 이상은 여기에서 사용 된 확장 방법을 지원하지 않습니다.
확장을 설정하려면 먼저 lemminflect 가져 오십시오. 이로 인해 각 스파이 Token 에 대한 새로운 lemma 와 inflect 방법이 생성됩니다. 이 방법은 튜플이 아닌 가장 일반적인 철자가 포함 된 문자열이 반환되는 것을 제외하고 위에서 설명한 방법과 유사하게 작동합니다.
> import spacy
> import lemminflect
> nlp = spacy.load('en_core_web_sm')
> doc = nlp('I am testing this example.')
> doc[2]._.lemma()
test
> doc[4]._.inflect('NNS')
examples
버그를 찾으면 GitHub 문제 목록에보고하십시오. 그러나 올바른 변곡을 반환 할 때 발생할 수있는 여러 가지 유형의 문제가 있습니다. 이 중 일부는 쉽게 고칠 수 없습니다. 형태가 감염된 문제는 다음과 같습니다.
한 가지 일반적인 문제는 일부 동사 "BE"형태가 TreeKBank 태그에 의해 완전히 지정되지 않는다는 것입니다. 예를 들어,/vbd는 "was"또는 "was"에 대한/vbd invects "am"또는 "are"에 대한/vbp의 입출. 이러한 형식을 명확하게하려면 문장의 다른 단어를 검사해야합니다. 현재 Lemminflect에는이 기능이 포함되지 않습니다.