NLPiper,一个轻量级的包,集成了一系列框架来预处理文档。
项目描述
NLPiper 是一个包,它整合了不同的 NLP 工具并将它们的转换应用到目标文档中。
目标
与一系列框架集成的轻量级软件包,用于预处理文档。
安装
pip
您可以使用或您喜欢的包管理器从 PyPi 安装 NLPiper :
pip install nlpiper
可选依赖项
一些转换需要安装额外的包。下表解释了可以安装的可选依赖项:
包裹 | 描述 |
---|---|
bs4 |
在CleanMarkup中用于从文档中删除 HTML 和 XML。 |
gensim |
在GensimEmbeddings中用于文档嵌入提取。 |
hunspell |
在Stemmer和SpellCheck中使用以规范化文档。 |
nltk |
在RemoveStopWords中用于从文档中删除停用词。 |
numpy |
用于某些文档的转换。 |
sacremoses |
在MosesTokenizer中用于标记文档。 |
spacy |
在SpacyTokenizer中用于标记文档,也可用于提取实体、标签等。 |
stanza |
在StanzaTokenizer中用于标记文档,也可用于提取实体、标签等。 |
torchtext |
在TorchTextEmbeddings中用于文档嵌入提取。 |
要安装您的目的所需的可选依赖项,您可以运行:
pip install nlpiper[<package>]
您可以使用以下命令一次安装所有这些依赖项:
pip install nlpiper[all]
可以使用以下方式安装该软件包pip
:
pip install nlpiper
对于所有可用的转换:
pip install 'nlpiper[all]'
,否则,只需安装所需的软件包。
用法
定义管道:
>>> from nlpiper.core import Compose
>>> from nlpiper.transformers import cleaners, normalizers, tokenizers
>>> pipeline = Compose([
... cleaners.CleanNumber(),
... tokenizers.BasicTokenizer(),
... normalizers.CaseTokens()
... ])
>>> pipeline
Compose([CleanNumber(), BasicTokenizer(), CaseTokens(mode='lower')])
生成一个文档和文档结构:
>>> from nlpiper.core import Document
>>> doc = Document("The following character is a number: 1 and the next one is not a.")
>>> doc
Document(
original='The following character is a number: 1 and the next one is not a.',
cleaned='The following character is a number: 1 and the next one is not a.',
tokens=None,
embedded=None,
steps=[]
)
将管道应用到文档:
>>> doc = pipeline(doc)
>>> doc
Document(
original='The following character is a number: 1 and the next one is not a.',
cleaned='The following character is a number: and the next one is not a.',
tokens=[
Token(original='The', cleaned='the', lemma=None, stem=None, embedded=None),
Token(original='following', cleaned='following', lemma=None, stem=None, embedded=None),
Token(original='character', cleaned='character', lemma=None, stem=None, embedded=None),
Token(original='is', cleaned='is', lemma=None, stem=None, embedded=None),
Token(original='a', cleaned='a', lemma=None, stem=None, embedded=None),
Token(original='number:', cleaned='number:', lemma=None, stem=None, embedded=None),
Token(original='and', cleaned='and', lemma=None, stem=None, embedded=None),
Token(original='the', cleaned='the', lemma=None, stem=None, embedded=None),
Token(original='next', cleaned='next', lemma=None, stem=None, embedded=None),
Token(original='one', cleaned='one', lemma=None, stem=None, embedded=None),
Token(original='is', cleaned='is', lemma=None, stem=None, embedded=None),
Token(original='not', cleaned='not', lemma=None, stem=None, embedded=None),
Token(original='a.', cleaned='a.', lemma=None, stem=None, embedded=None)
],
embedded=None,
steps=['CleanNumber()', 'BasicTokenizer()', "CaseTokens(mode='lower')"]
)
可用的变压器
清洁工
整体清理文档,例如删除 HTML、删除重音、删除电子邮件等。
CleanURL
:从文本中删除 URL。CleanEmail
:从文本中删除电子邮件。CleanNumber
:从文本中删除数字。CleanPunctuation
:从文本中删除标点符号。CleanEOF
:从文本中删除文件结尾。CleanMarkup
:从文本中删除 HTML 或 XML。CleanAccents
:从文本中删除重音符号。
分词器
清理完成后对文档进行标记(将文档拆分为标记)
BasicTokenizer
:用文本中的空格分割标记。MosesTokenizer
: 使用 Moses 分词器 ( https://github.com/alvations/sacremoses )拆分令牌StanzaTokenizer
: 使用 Stanza 分词器 ( https://github.com/stanfordnlp/stanza )拆分令牌
归一化器
适用于令牌级别,例如删除停用词、拼写检查等。
CaseTokens
: 小写或大写所有标记。RemovePunctuation
:从结果标记中删除标点符号。RemoveStopWords
:删除停用词作为标记。VocabularyFilter
:仅允许来自预定义词汇表的标记。Stemmer
:从令牌中获取词干。SpellCheck
:拼写检查标记,如果给定最大距离,将使用建议的单词计算与标记的 Levenshtein 距离,如果较低,则将标记替换为建议,否则将保留标记。如果单词拼写不正确,则没有给出最大距离,则将替换为空字符串。
嵌入
应用于令牌级别,通过嵌入转换单词
GensimEmbeddings
:使用 Gensim 词嵌入。TorchTextEmbeddings
:使用torchtext模型应用词嵌入Glove
,CharNGram
和FastText
。
文档
Document
是一个数据类,包含文本预处理期间使用的所有信息。
文档属性:
original
: 要处理的原始文本。cleaned
:文档启动时要处理的原始文本,然后属性哪个Cleaners
和Tokenizers
工作。tokens
: 使用 . 获得的令牌列表Tokenizer
。steps
:应用于文档的转换列表。embedded
: 文档嵌入。
token
:
original
: 原始令牌。cleaned
:初始时的原始令牌,然后根据 . 修改Normalizers
。lemma
:token lemma(需要使用 normalizer 或 tokenizer 来获得)。stem
:token stem(需要使用规范化器来获取)。ner
:token entity(需要使用normalizer或者tokenizer来获取)。embedded
:令牌嵌入。
撰写
Compose 将选择的转换器应用到给定的文档中。它限制了可以应用转换器的顺序,首先是 Cleaners,然后是 Tokenizer,最后是 Normalizer 和 Embeddings。
可以使用已处理文档中的步骤创建组合:
>>> doc.steps
['CleanNumber()', 'BasicTokenizer()', "CaseTokens(mode='lower')"]
>>> new_pipeline = Compose.create_from_steps(doc.steps)
>>> new_pipeline
Compose([CleanNumber(), BasicTokenizer(), CaseTokens(mode='lower')])
也可以回滚应用于文档的步骤:
>>> new_doc = Compose.rollback_document(doc, 2)
>>> new_doc
Document(
original='The following character is a number: 1 and the next one is not a.',
cleaned='The following character is a number: and the next one is not a.',
tokens=None,
embedded=None,
steps=['CleanNumber()']
)
>>> doc
Document(
original='The following character is a number: 1 and the next one is not a.',
cleaned='The following character is a number: and the next one is not a.',
tokens=[
Token(original='The', cleaned='the', lemma=None, stem=None, embedded=None),
Token(original='following', cleaned='following', lemma=None, stem=None, embedded=None),
Token(original='character', cleaned='character', lemma=None, stem=None, embedded=None),
Token(original='is', cleaned='is', lemma=None, stem=None, embedded=None),
Token(original='a', cleaned='a', lemma=None, stem=None, embedded=None),
Token(original='number:', cleaned='number:', lemma=None, stem=None, embedded=None),
Token(original='and', cleaned='and', lemma=None, stem=None, embedded=None),
Token(original='the', cleaned='the', lemma=None, stem=None, embedded=None),
Token(original='next', cleaned='next', lemma=None, stem=None, embedded=None),
Token(original='one', cleaned='one', lemma=None, stem=None, embedded=None),
Token(original='is', cleaned='is', lemma=None, stem=None, embedded=None),
Token(original='not', cleaned='not', lemma=None, stem=None, embedded=None),
Token(original='a.', cleaned='a.', lemma=None, stem=None, embedded=None)
],
embedded=None,
steps=['CleanNumber()', 'BasicTokenizer()', "CaseTokens(mode='lower')"]
)
开发安装
git clone https://github.com/dlite-tools/NLPiper.git
cd NLPiper
poetry install
要安装可选依赖项,您可以运行:
poetry install --extras <package>
要安装所有可选依赖项,请运行:
poetry install --extras all
贡献
欢迎所有贡献、错误报告、错误修复、文档改进、增强和想法。
可以 在 GitHub 上的贡献指南中找到有关如何贡献的详细概述。
问题
去这里提交功能请求或错误修正。
许可证和学分
NLPiper
在MIT许可下获得许可,由 Tomás Osório ( @tomassosorio )、Daniel Ferrari ( @FerrariDG )、Carlos Alves ( @cmalves、João Cunha ( @jfecunha )编写和维护
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。