小编Jak*_*kob的帖子

是否有铁路图的扩展来捕获异常?

铁路图是可视化无上下文语法的流行方法,您可以将Backus-Naur形式映射到这些图表.但是BNF的某些变体,例如W3C-BNF允许例外(因为无差异语言不会因差异而关闭,这些例外必须是常规的).我想在铁路图中用异常来形象化语法.我应该创建自己的图形符号扩展还是有人已经尝试过这个?

这是一个带例外规则的例子(是的,你也可以毫无例外地表达这个特殊的语法,但这不是重点):

comment := "<!--" (string - "--") "-->"
Run Code Online (Sandbox Code Playgroud)

例外可以是任何常规语法.我想通过一些特殊类型的箭头或线(这里用感叹号表示)添加连接到非终端符号的异常:

[<] ? [!] ? [-] ? [-] ? (string) ? [-] ? [-] ? [>]
                          !
                          ! ? [-] ? [-] ? ?
Run Code Online (Sandbox Code Playgroud)

PS:语法错了,应该是

comment := "<!--" (string - (string "--" string | string "-")) "-->"
Run Code Online (Sandbox Code Playgroud)

也许非直观地使用否定是其在正式语法中很少使用的一个原因?

bnf context-free-grammar

5
推荐指数
1
解决办法
445
查看次数

简单的版本控制系统或版本控制文件系统或版本控制数据库

我正在寻找用于大量记录或文件的简单版本控制系统(约5000万,未压缩的约100GB,已压缩的约20MB)。这些文件每个只有几千字节,并且具有唯一的ID,所以我不在乎它们是否存储在平面结构(表,目录...)中。平均而言,每条记录每月更改一次,但是大多数更改的差异小于千字节,因此应该易于压缩版本。但是,对于每个版本只有一个条目的朴素数据库将增长得太快。我需要执行以下操作:

  • 基本的CRUD操作:创建,读取,更新,删除
  • 快速列出最近的变化
  • 快速列出特定记录的最新更改
  • 查询给定时间内的变化
  • 查询给定用户的更改(每个编辑都与某个用户ID关联,并且可以选择将提交消息作为注释)
  • 对于写操作,必须有一个提交钩子来验证和拒绝格式错误的记录。

简而言之,我正在寻找用于简单记录或文件的类似Wiki的软件。

我考虑了可能的解决方案:

  • 将文件放在版本控制系统中。这为我提供了复制和许多可用的访问工具,因此这是我的首选解决方案。但是对于像git这样的分布式系统来说,数据量太大。是否有人使用Subversion成功完成类似任务?

  • 在数据库或文件系统中实现我自己的版本控制。我可能只需要存储压缩的记录和差异,就可以进行更多的工作并学到一些东西。如果只是为了娱乐,这将是我的首选解决方案。

  • 使用版本控制文件系统。这将使设置,复制和访问更加困难。可能我需要在文件系统上方实现自己的访问API。

  • 使用版本控制数据库系统。你能建议一些吗?

  • 使用其他现有数据存储进行版本控制(MediaWiki?,Amazon Cloud Drive?,...)

显然有很多路径。其他人成功使用了哪些路径来获取相似或更大数量的数据?

version-control database-versioning

5
推荐指数
1
解决办法
1144
查看次数

你如何最好地将Perl方法中的错误归因于调用者

给定一个可能因警告和/或错误而失败的方法,我希望错误方法显示在调用者处.这个脚本的Fir实例:

foo(0);         # line 1

sub foo {
    1 / shift;  # line 4
}
Run Code Online (Sandbox Code Playgroud)

产生错误Illegal division by zero at foo.pl line 4,但我想要Illegal division by zero at foo.pl line 1.如果我将方法放在模块中或者如果我将方法体包装在eval中,应该有几种方法,但我没有找到这样简单的方法:

sub foo {
    attributeErrorsToCaller; # do some magic
    1 / shift;
}
Run Code Online (Sandbox Code Playgroud)

有这样的方式吗?


编辑: mirod的答案接近而不是我想要的:

Foo::foo(0);         # line 1

package Foo;
use diagnostics -traceonly;
BEGIN { disable diagnostics; }

sub foo {
    enable diagnostics;
    1 / shift;       # line 9
}
Run Code Online (Sandbox Code Playgroud)

没有enable diagnostics错误消息是 …

error-handling perl

5
推荐指数
2
解决办法
152
查看次数

SimpleNLG - 如何获得名词的复数?

我正在使用SimpleNLG 4.4.2复数形式的名词:

final XMLLexicon xmlLexicon = new XMLLexicon();
final WordElement word = xmlLexicon.getWord("apple", LexicalCategory.NOUN);
System.out.println(word);
System.out.println(word.getFeature(LexicalFeature.PLURAL));
Run Code Online (Sandbox Code Playgroud)

然而即使是这样一个简单的例子,getFeature返回null代替apples.我究竟做错了什么?

java nlp nlg simplenlg

5
推荐指数
1
解决办法
716
查看次数

如何从OAuth2.0返回批准的范围

与OAuth2.0兼容的库赞助人指定API,我偶然发现了OAuth范围.OAuth2.0规范似乎在某些方面有不同的解释,例如GitHub使用逗号分隔范围,而Google使用空格,如RFC 6749中所定义.RFC告诉:

如果发布的访问令牌范围与客户端请求的范围不同,授权服务器必须包含"范围"响应参数,以通知客户端授予的实际范围

但是后面的规范中没有提到范围响应参数.特别是我想实现资源所有者密码凭证授权(第4.3节).这个响应示例在OAuth2.0规范中给出:

 HTTP/1.1 200 OK
 Content-Type: application/json;charset=UTF-8
 Cache-Control: no-store
 Pragma: no-cache

 {
   "access_token":"2YotnFZFEjr1zCsicMWpAA",
   "token_type":"example",
   "expires_in":3600,
   "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
   "example_parameter":"example_value"
 }
Run Code Online (Sandbox Code Playgroud)

我应该将范围包含为以空格分隔的列表,逗号分隔列表还是JSON文件?

 {
   "scope": [ "read", "write", "foobar" ],
   "access_token":"2YotnFZFEjr1zCsicMWpAA",
   "token_type":"example",
   "expires_in":3600,
   "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
   "example_parameter":"example_value"
 }
Run Code Online (Sandbox Code Playgroud)

oauth-2.0

4
推荐指数
1
解决办法
1539
查看次数

如何查找(Debian/Ubuntu/...)包提供所需的Perl模块

我发现安装本机Debian或Ubuntu Perl软件包通常比通过"手动"安装Perl模块更加可靠和方便cpanm(特别是对于XS-Modules).在给出所需Perl模块列表的情况下,是否有一种简单的方法可以找到这些模块?最方便的方法是映射cpanfile,例如

requires 'XML::LibXSLT', '1.78';
Run Code Online (Sandbox Code Playgroud)

到为不同目标平台提供模块的发行版和包列表:

XML::LibXSLT, Ubuntu 13.04, libxml-libxslt-perl, 1.78
XML::LibXSLT, Ubuntu 13.10, libxml-libxslt-perl, 1.78
XML::LibXSLT, Ubuntu 14.04, libxml-libxslt-perl, 1.84
XML::LibXSLT, Debian squeeze, libxml-libxslt-perl, 1.70
XML::LibXSLT, Debian wheezy, libxml-libxslt-perl, 1.77
XML::LibXSLT, Debian jessie, libxml-libxslt-perl, 1.92
XML::LibXSLT, Debian sid, libxml-libxslt-perl, 1.92
Run Code Online (Sandbox Code Playgroud)

PS:我想这些信息可以从每个发行版的软件包存储库中查找,例如http://packages.ubuntu.com/https://packages.debian.org但是有一个可编写脚本的解决方案已经做到了这一点抬头?

perl debian package-managers

4
推荐指数
1
解决办法
1140
查看次数

如何在不重新启动的情况下在Apache中部署PSGI脚本?

我想在Plack中部署一个在Apache2中运行的PSGI脚本.Apache配置有:

<Location "/mypath">
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app  /path/to/my/script.psgi
</Location>
Run Code Online (Sandbox Code Playgroud)

当我使用plackup测试脚本时,该--reload参数会监视.psgi文件的更新.在生产环境中,由于性能原因,Apache和Plack不会检查并重新启动每个更改,但是如何明确告诉他们重新启动Plack::Handler::Apache2和/或PSGI脚本部署新版本?

看起来Plack会定期检查一些变化,但我不清楚何时.此外,它似乎创建了多个实例,所以我有时会得到不同版本的script.psgi时间/mypath.手动刷新perl响应处理程序而不必重新启动Apache或等待一段未知的时间会很有帮助.

perl mod-perl plack

3
推荐指数
1
解决办法
2615
查看次数

NLG - 使用 simplenlg 创建文本描述

我正在尝试在 NLG 的帮助下生成产品描述。例如,如果我指定产品的属性(例如手机),例如其操作系统RAM处理器显示器电池等,它应该向我输出手机的可读描述。我看到有一些付费服务(Quill、Wordsmith 等)也是如此。然后我遇到了 NLG 的开源 Java API - simplenlg。我看到如何通过指定句子短语和特征(如时态、询问等)来创建句子,但没有看到从文本创建描述的选项。

有谁知道如何使用 simplenlg 从单词创建文本描述?

是否有其他工具/框架/API 可用于完成此任务(不限于 Java)?

java nlg simplenlg

3
推荐指数
1
解决办法
2672
查看次数

从目录中获取文件的排序列表

我想要一个目录中的文件排序列表.如何将该sort函数应用于IOmonad 列表?

import System.Directory 
import Data.List

sortedFiles :: FilePath -> IO [FilePath]
sortedFiles path = do
    files <- getDirectoryContents "."
    return sort files                   -- this does not work
Run Code Online (Sandbox Code Playgroud)

haskell

0
推荐指数
1
解决办法
390
查看次数