包lingo提供了自然语言处理所需的数据结构和算法。
具体而言,它为英语提供了一个POS标记器( lingo/pos ),一个依赖项解析器( lingo/dep )和基本的令牌( lingo/lexer )。它还提供了用于持有库存的数据结构( lingo/corpus )和Treebanks( lingo/treebank )。
该软件包的目的是为自然语言处理提供生产质量管道。
包裹是可抓的: go get -u github.com/chewxy/lingo
该软件包及其子包取决于很少的外部软件包。他们在这里:
| 包裹 | 用于 | 活力 | 笔记 | 执照 |
|---|---|---|---|---|
| Gorgonia | 机器学习 | 必不可少的。重写它们并不难,但是为什么呢? | 同一位作者 | Gorgonia许可证(类似于Apache) |
| 戈格维兹 | 注释的可视化和其他与图相关的可视化 | 对于可视化至关重要,这是一个不错的功能 | API上次更改2017年4月12日 | Gographviz许可证(Apache 2.0) |
| 错误 | 错误 | 没有它,包裹不会死,但是有一个很好的 | 过去一年的稳定API | 错误许可证(MIT/BSD喜欢) |
| 放 | 设置操作 | 可以轻松更换 | 过去一年的稳定API | 设置许可证(MIT/BSD状) |
请参阅各个软件包以获取使用。 cmd目录中还有一堆可执行文件。它们本来是关于如何设置自然语言处理管道的示例。
带有此软件包的自然语言管道是由频道大量驱动的。这是依赖解析的示例:
func main () {
inputString: `The cat sat on the mat`
lx := lexer . New ( "dummy" , strings . NewReader ( inputString )) // lexer - required to break a sentence up into words.
pt := pos . New ( pos . WithModel ( posModel )) // POS Tagger - required to tag the words with a part of speech tag.
dp := dep . New ( depModel ) // Creates a new parser
// set up a pipeline
pt . Input = lx . Output
dp . Input = pt . Output
// run all
go lx . Run ()
go pt . Run ()
go dp . Run ()
// wait to receive:
for {
select {
case d := <- dp . Output :
// do something
case err := <- dp . Error :
// handle error
}
}
}有关特定任务(POS标记,解析,命名实体识别等),请参阅每个子书的回教徒。该软件包本身主要提供了子弹将使用的数据结构。
也许最重要的数据结构是*Annotation结构。它基本上含有一个单词和相关的元数据。
对于依赖性解析,该图采用三种形式: *Dependency , *DependencyTree和*Annotation 。这三种形式均可从一种转换为另一个形式。 TODO:解释每种数据类型背后的理由。
您可能已经注意到的一个特定怪癖是, POSTag和DependencyType被用作常数编码。实际上,该软件包确实提供了两种变体:一个来自斯坦福/宾夕法尼亚州立大学的牛排,一个来自Universaldepentencies。
硬编码的主要原因主要是出于绩效原因 - 知道分配多少减少了该计划必须做的许多其他工作。它还减少了突变全局变量的机会。
当然,这是一个权衡 - 计划仅限于这两个选择。值得庆幸的是,只有有限数量的POS标签和依赖关系类型。已经实施了两个最受欢迎的两个(斯坦福/PTB和普遍依赖性)。
支持以下构建标签:
要使用特定的标签集或RERET,请因此构建程序: go build -tags='stanfordtags' 。
默认标签和依赖关系类型是通用依赖项版本。
您还应注意,令牌, lingo/lexer不是您通常的普通NLP令牌。这是一个代币仪,它可以按空间进行象征,并具有一些特定的英语规则。它的灵感来自罗布·派克(Rob Pike)关于勒克斯斯(Lexers)的演讲。我认为为NLP编写类似的东西会很酷。
lingo/lexer包装的测试用例展示了其处理Unicode的方式和其他pathalogical English。
有关更多信息,请参见贡献。
此软件包已根据MIT许可获得许可。