小编ste*_*hom的帖子

如何使用NLTK从诱导语法中生成句子?

我有一个(大)解析句子列表(使用斯坦福解析器解析),例如,句子"现在你可以被娱乐"有以下树:

(ROOT
  (S
    (ADVP (RB Now))
    (, ,)
    (NP (PRP you))
    (VP (MD can)
      (VP (VB be)
        (VP (VBN entertained))))
    (. .)))
Run Code Online (Sandbox Code Playgroud)

我正在使用句子树集来使用nltk来引导语法:

import nltk

# ... for each sentence tree t, add its production to allProductions
allProductions += t.productions()

# Induce the grammar
S = nltk.Nonterminal('S')
grammar = nltk.induce_pcfg(S, allProductions)
Run Code Online (Sandbox Code Playgroud)

现在我想grammar用来生成新的随机句子.我的希望是,由于语法是从一组特定的输入示例中学习的,因此生成的句子在语义上是相似的.我可以在nltk中这样做吗?

如果我不能使用nltk这样做,是否存在任何其他可以采用(可能重新格式化)grammar并生成句子的工具?

python nlp nltk

15
推荐指数
2
解决办法
1万
查看次数

如何在LLVM中编写自定义的模块间通道?

我通过扩展FunctionPass类在LLVM中编写了标准的Analysis传递.一切似乎都有意义.

现在我要做的是编写几个模块间通道,即允许我一次分析多个模块的通道.一个这样的传递的目的是构建整个应用程序的调用图.另一个这样的传递的目的是我有一个关于函数调用及其参数的优化的想法.

我知道LLVM中的过程间通过,通过扩展ModulePass类,但只允许在单个模块中进行分析.

我知道LLVM中的链接时间优化(LTO),但是(a)我不太清楚这是否是我想要的,(b)我没有找到关于如何实际编写 LTO传递的示例或文档.

如何在LLVM中编写一个模块间传递,即一个可以访问应用程序中所有模块的传递?

static-analysis llvm llvm-ir lto

11
推荐指数
2
解决办法
2019
查看次数

在R中导入数百万个文件的最快方法?

我有1500万个CSV文件,每个文件有两列(整数和浮点数),以及5到500行.每个文件看起来像:

3453,0.034
31,0.031
567,0.456
...
Run Code Online (Sandbox Code Playgroud)

目前,我正在迭代所有文件,并使用read.csv()将每个文件导入大列表.这是一个简化版本:

allFileNames = Sys.glob(sprintf("%s/*/*/results/*/*", dir))

s$scores = list()

for (i in 1:length(allFileNames)){
        if ((i %% 1000) == 0){
            cat(sprintf("%d of %d\n", i, length(allFileNames)))
        }

        fileName = allFileNames[i]
        approachID = getApproachID(fileName) 
        bugID = getBugID(fileName)

        size = file.info(fileName)$size
        if (!is.na(size) && size > 0){ # make sure file exists and is not empty
            tmp = read.csv(fileName, header=F, colClasses=c("integer", "numeric"))
            colnames(tmp) = c("fileCode", "score")
            s$scores[[approachID]][[bugID]]  = tmp
        } else {
            # File does not exist, or …
Run Code Online (Sandbox Code Playgroud)

csv import r

8
推荐指数
2
解决办法
2976
查看次数

在比较分支时,有没有办法在GitHub中"隐藏"合并提交?

我的10人左右的团队正在使用GitHub进行开发项目.我们有一个主develop分支,我们从中创建功能分支来完成我们的开发任务,然后我们将功能分支合并回来develop.我们使用Pull Requests进行代码审查.所有标准的东西.

然而,有一件事困扰着我.

假设开发人员A创建名为的功能分支myFeature.比如说,在这个分支中,他对单个文件进行了一行更改Loop.java.

与此同时,develop其他开发人员将100个不相关的提交合并到其他分支.

现在,在开发人员A推动他的更改并发出拉取请求之前,他希望确保他的更改与最新的develop分支一起工作.因此,他将HEAD合并develop到他的分支中:

git checkout develop
git pull
git checkout myFeature
git merge develop
# testing and stuff
git push origin myFeature
Run Code Online (Sandbox Code Playgroud)

最后一个命令(git merge develop)总是会导致新的提交.因此,当开发人员A推送他的更改并发出Pull Request for时myFeature,Pull Request 的审阅者将看到101个提交添加到分支myFeature:一个更改为Loop.java,另一个100不相关,并且实际上已经合并develop.在这里,它们只是作为噪声来掩盖开发者在这个分支中真正改变的东西.

有没有一种简单的方法让审阅者能够通过开发人员的A更改来判断改变了什么,并以某种方式"隐藏"来自合并的提交develop我特别考虑了Pull Request视图中的"Files Changed"选项卡.(我意识到我可以使用"提交"选项卡,逐个执行所有提交以查看更改内容,但如果有很多提交,这可能会很烦人.我喜欢单数,最后的"文件已更改"标签.)

编辑:git rebase develop已被提议作为一种选择,但我不认为它适合我们的目的.通常情况下,多个开发人员都会继续努力myFeature,因此自从重写历史记录以来,rebase可能会让所有人陷入困境.

编辑2:正如@kan在下面指出的那样,GitHub实际上表现得很好:是的,它会在Pull Request的"Commits"选项卡中显示合并提交(这很好),但是在"Files Changed"选项卡下,仅列出此功能分支上更改的文件(而不是合并中的文件).这正是我正在寻找的.

git github

7
推荐指数
1
解决办法
6989
查看次数

在Eclipse中使用Ant的类路径

我有一个Ant build.xml文件在命令行上运行正常:它编译,构建JAR,我能够从JAR执行main方法就好了.该build.xml文件引用了分散在这里和那里的几个第三方库.构建JAR时,脚本不会将所有第三方库都包含在JAR本身中.相反,它将他们的路径放入JAR的清单中.这有助于保持我的JAR苗条和整洁.

我希望能够在Eclipse中编辑和调试我的项目,但我找不到一个简单的方法.我可以让我的项目使用Ant文件来构建项目,这似乎有效.但是,Eclipse无法找到第三方库,因此Eclipse存在两个问题:

  1. 它显示(在文本编辑器中)很多编译错误,因为许多类是未定义的,并且
  2. 它无法执行JAR.

我可以通过手工指定,在两个不同的地方(即构建路径via Properties->Java Build Path->Libraries和执行类路径via Run Configurations->Classpath),所有第三方库来解决上述两个问题.但似乎我不应该手动执行此操作,因为所有第三方库已经列在我的JAR清单中.我究竟做错了什么?

这是我的build.xml档案:

<!-- Set global properties for this build -->
<property name="src"         location="./src" />
<property name="build"       location="./build"/>
<property name="dist"        location="./dist"/>
<property name="logs"        location="./logs"/>
<property name="docs"        location="./docs"/>
<property name="jar"         location="${dist}/dynamic_analyzer.jar"/>
<property name="lib"         location="../../thirdparty/lib"/>
<property name="hive-util"   location="../../hive-utils/dist"/>
<property name="hpdb"        location="../../hive-db/hpdb/dist"/>
<property name="static"      location="../../hive-backend/static_analyzer/dist"/>
<property name="mainclass"   value="com.datawarellc.main.DynamicMain"/>

<path id="dep.runtime">
    <fileset dir="${lib}"       includes="**/*.jar"/>
    <fileset dir="${hive-util}" includes="**/*.jar"/>
    <fileset dir="${hpdb}"      includes="**/*.jar"/>
    <fileset dir="${static}"    includes="**/*.jar"/>
</path>

<target name="clean">
    <delete dir="${build}"/> …
Run Code Online (Sandbox Code Playgroud)

java eclipse ant

6
推荐指数
1
解决办法
3079
查看次数

将LLVM添加到我的Cmake项目中:为什么LLVM的Cmake文件中存在硬编码路径?

我在我的C++项目中使用LLVM/Clang.我可以使用Makefile构建并运行一切.

我现在正试图转移到Cmake,我无法让事情发挥作用.让我解释一下我做了什么.

我正在学习本教程:

http://llvm.org/docs/CMake.html#embedding

该网页的相关摘要如下:

从LLVM 3.5开始,CMake和autoconf/Makefile构建系统都将LLVM库导出为可导入的CMake目标.

大!我将下载LLVM 3.5,我应该好好去.我去了下载页面:

http://llvm.org/releases/download.html

并为Ubuntu 14.04 Linux下载了Clang的预构建二进制文件.

然后,我将以下内容添加到我的CMakeLists.txt文件中:

find_path (LLVM_DIR LLVM-Config.cmake
     /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake
         )
message(STATUS "LLVM_DIR = ${LLVM_DIR}")
find_package(LLVM REQUIRED CONFIG)
Run Code Online (Sandbox Code Playgroud)

(这与教程相同,除了我设置,LLVM_DIR因为它当前位于非标准位置.)

当我运行时cmake,我收到以下错误:

[dev@beauty:/path/to/project/build (develop)] $ cmake ..
-- LLVM_DIR = /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake
CMake Error at /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake/LLVMConfig.cmake:50 (include):
  include could not find load file:

    /home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/share/llvm/cmake/LLVMExports.cmake
Call Stack (most recent call first):
  CMakeLists.txt:14 (find_package)


CMake Error at /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake/LLVMConfig.cmake:53 (include):
  include could not find load file:

    /home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/share/llvm/cmake/LLVM-Config.cmake
Call Stack (most recent call …
Run Code Online (Sandbox Code Playgroud)

c++ linux cmake llvm

6
推荐指数
1
解决办法
5762
查看次数

如何在打印带有特殊字符的变量时禁用字符串插值?

在Perl中,我正在使用XML::Twig读取XML文件.某些属性的文本如下所示:

&lt;p&gt;Here is some text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more text.
Run Code Online (Sandbox Code Playgroud)

我正在将此属性读入名为的变量中$Body.我想将这个变量打印到文件而不插入字符串中的特殊字符,即输出应该看起来与输入完全一样.我的代码看起来像:

open (my $OUT, ">", "out.csv") or die $!;
print $OUT $Body;
Run Code Online (Sandbox Code Playgroud)

但是,当我查看时out.csv,我看到:

<p>Here is some text.</p>

<p>Some more text.
Run Code Online (Sandbox Code Playgroud)

相反,我想看看原始字符串:

&lt;p&gt;Here is some text.&lt;/p&gt;&#xA&;#xA;&lt;p&gt;Some more text.
Run Code Online (Sandbox Code Playgroud)

我试过以下但没有成功:

  • print $OUT '$Body'; 不起作用,只显示"$ Body"
  • print $OUT "$Body"; 不起作用,与没有引号相同.
  • print $OUT qw{$Body}; 不起作用,只显示"$ Body".

    这是一个完整的例子:

tmp.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
  <node Body="&lt;p&gt;Here is some text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more text."/>
</root>
Run Code Online (Sandbox Code Playgroud)

码:

#!/usr/bin/perl
use strict;
use XML::Twig;

my $t=XML::Twig->new();
$t->parsefile("tmp.xml"); 

my $root= …
Run Code Online (Sandbox Code Playgroud)

perl string-interpolation xml-twig

2
推荐指数
1
解决办法
312
查看次数

标签 统计

llvm ×2

ant ×1

c++ ×1

cmake ×1

csv ×1

eclipse ×1

git ×1

github ×1

import ×1

java ×1

linux ×1

llvm-ir ×1

lto ×1

nlp ×1

nltk ×1

perl ×1

python ×1

r ×1

static-analysis ×1

string-interpolation ×1

xml-twig ×1