python的bridge(bridge是一个轻量级的可移植自然语言处理库)

pybridge的Python项目详细描述


什么是桥?

bridge是一个用于自然语言处理的轻量级可移植库,由于它的体积很小,可以很容易地移植到任何编程语言中。到目前为止,bridge在50个sloc中提供了一个python库,在78个sloc中提供了一个javascript库。

桥是怎么工作的?

与其他研究语言语法特征的自然语言处理方法不同,bridge的目标是结构化的意义。bridge知道文本中有意义的部分,而不是通过语法检查来提取意义,而是从字面上理解句子。

带桥接器的示例程序

最好用一个例子来说明bridge的威力,这样我们就可以用bridge构造一个简单的计算器了!

首先我们应该构造一个桥对象:

Bridge = bridge();

现在,让我们将我们的意义模型添加到bridge中。首先,我们要教它什么是数字。我们将使用一个语法对象来教bridge一个新概念。每个语法都有一个或多个“type”或“role”,例如我们的数字有role“number”。另外,我们需要一些定义来创建语法。每个定义或模型都应该有一个单独的“类型”和一个regex模式来测试传递给它的原子。每个语法都有一个“值”,bridge使用它来创建生成的原子。最后,每个语法都有一个“权重”来表示语法的重要性。

当第一座桥检查一个句子时,它把句子分解成原子。每个原子在bridge中显示一个有意义的词性,在第一次检查时bridge给所有原子一个“word”类型。

我们将按如下方式教授数字模型:

Bridge.add_grammar(
  grammar(
    ['number'],          # grammar type
    [definition(         # definitions
      'word',            # type of atom to accept
      r'^\d+$')],        # regex to match atoms against
    '{0}',               # grammar value
    0));                 # weight

现在让我们教它基本的数学运算:

Bridge.add_grammar(grammar(['plus'], [definition('word', r'^\+$')], '{0}', 0)) # plus
Bridge.add_grammar(grammar(['minus'], [definition('word', r'^-$')], '{0}', 0)) # minus

现在我们将教授数学运算,并使用我们已经定义的模型:

Bridge.add_grammar(
  grammar(['plus-command', 'number'],
              [definition('number', r'.*'),
               definition('plus', r'.*'),
               definition('number', r'.*')],
              '(+ {0} {2})', 1));

Bridge.add_grammar(
  grammar(['minus-command', 'number'],
              [definition('number', r'.*'),
               definition('minus', r'.*'),
               definition('number', r'.*')],
              '(- {2} {0})', 1));

现在bridge可以做简单的数学运算,现在它可以这样做:

1 - 2 + 3 - 4 + 5

并将其转换为以下lisp代码:

(+ (- 4 (+ (- 2 1) 3)) 5)

(您可以使用hy运行这个lisp)是时候教bridge一些自然语言了:

Bridge.add_grammar(
  grammar
    (['and'],
     [definition('word', r'^and$')],
    '{0}', 0));

Bridge.add_grammar(
  grammar(
    ['numeral-and', 'number'],
    [definition('number', r'.*'),
     definition('and', r'.*'),
     definition('number', r'.*')],
    '{0} {2}', 2));

Bridge.add_grammar(
  grammar
    (['sum-command'],
     [definition('word', r'^sum$')],
    '{0}', 0));

Bridge.add_grammar(
  grammar(
    ['complete-function'],
    [definition('sum-command', r'.*'),
     definition('numeral-and', r'.*')],
    '(+ {1})', 3))

使用以下代码:

sentence = "sum 3 + 4 and 5 and 6 - 7 and 4"
print(Bridge.process(sentence)[0].value))

我们会得到:

(+ (+ 3 4) 5 (- 7 6) 4)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaPax考试:从非标准Maven存储库解析Karaf特性存储库(XML文件)   java Spring启动Bean创建异常   java中将ArrayList转换为数组的方法   Android Studio的java Unity插件。   java在CheckStyle中从方法计数中排除getter和setter   HibernateJava。sql。SQLSyntaxErrorException:表/视图“序列”不存在   与命令行程序Java vs C通信   java WebView膨胀异常   java在O(n)java8流中寻找两个列表的交集   java使用Gradle运行单元测试时,最大堆大小在哪里设置?   ssl加载java应用程序(CXF)内的jks文件   CI:Jenkins Git:Simple Java项目:希望在特定时间在脚本上发送消息   java根据位置更改数字   java按数值排序字符串数组   macos java版本“1.6.0_65”是否与java 6模棱两可?   Cassandra中的java时间戳