我只是想在Java 8中将日期字符串转换为DateTime对象.运行以下行:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDateTime dt = LocalDateTime.parse("20140218", formatter);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Exception in thread "main" java.time.format.DateTimeParseException:
Text '20140218' could not be parsed:
Unable to obtain LocalDateTime from TemporalAccessor:
{},ISO resolved to 2014-02-18 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1918)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1853)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
Run Code Online (Sandbox Code Playgroud)
语法与此处的建议相同,但我遇到了一个例外.我在用JDK-8u25.
我在数据库表中有大约一千万个文件的spamsum复合哈希值,我想找到彼此相似的文件.Spamsum哈希由两个最大64字节的CTPH哈希组成,它们看起来像这样:
384:w2mhnFnJF47jDnunEk3SlbJJ+SGfOypAYJwsn3gdqymefD4kkAGxqCfOTPi0ND:wemfOGxqCfOTPi0ND
Run Code Online (Sandbox Code Playgroud)
它们可以分为三个部分(在冒号上分割字符串):
384在上面的哈希中w2mhnFnJF47jDnunEk3SlbJJ+SGfOypAYJwsn3gdqymefD4kkAGxqCfOTPi0NDwemfOGxqCfOTPi0ND块大小是指第一个签名的块大小,第二个签名的块大小是第一个签名的块大小(此处:384 x 2 = 768).每个文件都有这些复合哈希中的一个,这意味着每个文件都有两个具有不同块大小的签名.
只有当它们的块大小相对应时,才能比较spamsum签名.也就是说,上面的复合哈希可以与包含块大小为384或768的签名的任何其他复合哈希进行比较.具有相似块大小的哈希的签名字符串的相似性可以作为两者之间相似性的度量.哈希表示的文件.
所以如果我们有:
file1.blk2 = 768file1.sig2 = wemfOGxqCfOTPi0NDfile2.blk1 = 768file2.sig1 = LsmfOGxqCfOTPi0ND通过计算两个签名的一些加权编辑距离(如Levenshtein距离),我们可以了解两个文件的相似程度.这两个文件看起来非常相似.
leven_dist(file1.sig2, file2.sig1) = 2
Run Code Online (Sandbox Code Playgroud)
还可以计算两个哈希值之间的归一化相似度得分(详见此处).
我想找到基于这些哈希值超过70%相似的任何两个文件,并且我非常喜欢使用可用的软件包(或API/SDK),尽管我不怕编码通过问题.
我试图打破哈希并使用Lucene(4.7.0)索引它们,但搜索似乎缓慢而乏味.这是我尝试过的Lucene查询的示例(对于每个单一签名 - 每个哈希两次并使用区分大小写的KeywordAnalyzer):
(blk1:768 AND sig1:wemfOGxqCfOTPi0ND~0.7) OR (blk2:768 AND sig2:wemfOGxqCfOTPi0ND~0.7)
Run Code Online (Sandbox Code Playgroud)
似乎Lucene的速度非常快Levenshtein自动机不接受超过2的编辑距离限制(我需要它支持高达0.7 x64≃19)并且它的正常编辑距离算法不适用于长搜索术语(使用的强力方法)一旦达到距离限制,就不会切断计算.)也就是说,可能是我的查询没有针对我想做的事情进行优化,所以请不要犹豫,纠正我.
我想知道我是否可以使用Lucene提供的任何算法来完成我所需要的,而不是直接计算编辑距离.我听说BK树是索引此类搜索的最佳方式,但我不知道算法的可用实现(Lucene是否使用了这些?).我也听说过一个可能的解决方案是使用n-gram方法缩小搜索列表的范围,但我不确定如何在包容性和速度方面编辑距离计算(我很确定Lucene支持那个).顺便说一句,有没有办法让Lucene在并行模式下运行术语搜索?
鉴于我使用Lucene仅预先匹配哈希并且我稍后使用适当的算法计算真实相似度得分,我只需要一种至少与相似性得分计算中使用的Levenshtein距离一样包容的方法 - 即,我不希望预匹配方法排除将被评分算法标记为匹配的哈希值.
任何帮助/理论/参考/代码或线索开始是值得赞赏的.
我有一个以下格式的数据帧:
id | name | logs
---+--------------------+-----------------------------------------
84 | "zibaroo" | "C47931038"
12 | "fabien kelyarsky" | c("C47331040", "B19412225", "B18511449")
96 | "mitra lutsko" | c("F19712226", "A18311450")
34 | "PaulSandoz" | "A47431044"
65 | "BeamVision" | "D47531045"
Run Code Online (Sandbox Code Playgroud)
如您所见,"logs"列包含每个单元格中的字符串向量.
有没有一种有效的方法将数据帧转换为长格式(每行一次观察),而没有将"日志"分成几列的中间步骤?
这很重要,因为数据集非常大,每人的日志数似乎是任意的.
换句话说,我需要以下内容:
id | name | log
---+--------------------+------------
84 | "zibaroo" | "C47931038"
12 | "fabien kelyarsky" | "C47331040"
12 | "fabien kelyarsky" | "B19412225"
12 | "fabien kelyarsky" | "B18511449"
96 | "mitra lutsko" | "F19712226"
96 | "mitra lutsko" …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试合并三个数据集以进行分析.我正在使用某些常用字段来建立数据集之间的连接.为了创建连接,我尝试使用以下类型的查询:
MATCH (p1:Person),(p2:Person)
WHERE p1.email = p2.email AND p1.name = p2.name AND p1 <> p2
CREATE UNIQUE (p1)-[IS]-(p2);
Run Code Online (Sandbox Code Playgroud)
可以类似地写成:
MATCH (p1:Person),(p2:Person {name:p1.name, email:p1.email})
WHERE p1 <> p2
CREATE UNIQUE (p1)-[IS]-(p2);
Run Code Online (Sandbox Code Playgroud)
不用说,对于具有大约100,000个Person节点的数据库,这是一个非常慢的查询,特别是假设Neo4j不并行处理单个查询.
现在,我的问题是是否有更好的方法在Neo4j中运行此类查询.我有至少8个CPU核心专用于Neo4j,只要单独的线程不会通过锁定彼此所需的资源来占用.
问题是我不知道Neo4j如何构建其Cypher执行计划.例如,假设我运行以下测试查询:
MATCH (p1:Person),(p2:Person {name:p1.name, email:p1.email})
WHERE p1 <> p2
RETURN p1, p2
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
尽管有LIMIT条款,Neo4j仍然需要相当长的时间来交付结果,这让我想知道即使是这样有限的查询,Neo4j在考虑LIMIT语句之前是否产生了整个笛卡尔积表.
我感谢任何帮助,无论是解决这个特定问题,还是让我了解Neo4j如何建立Cypher执行计划(以及如何优化查询).传统的Lucene索引可以在这里提供任何帮助吗?
我的数据库受到 Neo4j 2.1.1 中的错误的影响,该错误往往会损坏许多节点已被删除的区域中的数据库。事实证明,大多数受影响的关系在我的数据库中都被标记为删除。我已经使用单个查询编辑dump了其余的数据。neo4j-shell这提供了一个 1.5G Cypher 文件,我需要将其导入到 mint 数据库中,以使我的数据恢复到健康的数据结构中。
我注意到转储文件包含 (1) 模式、(2) 节点和 (3) 关系的定义。我已经从文件中删除了架构定义,因为它们可以稍后应用。现在的问题是,由于转储文件在节点创建(采用以下格式:_nodeid)和关系创建期间使用节点的单系列标识符,因此似乎所有CREATE语句(在我的例子中为 33,160,527)都需要在单个交易。
我的第一次尝试让服务器忙了 36 个小时,但没有结果。我已将neo4j-shell数据直接加载到新的数据库目录中,而不是连接到服务器。新数据库目录中的数据文件从未显示任何接收数据的迹象,并且消息日志显示许多指示线程阻塞的消息。
我想知道将这些数据返回数据库的最佳方法是什么?我应该加载特定的配置文件吗?我需要分配一个大的 Java 堆吗?将如此大的转储文件加载到数据库中有何技巧?
我正在尝试自动化大量扫描胶片的清理过程。我拥有 48 位 RGBI TIFF 文件(RGB + 红外)中的所有图像,并且我可以使用红外通道创建用于除尘的蒙版。我想知道是否有任何不错的开源修复实现可以用来实现这一目标(我用于批处理的所有其他软件都是我通过 Ruby 接口访问的开源库)。
我的第一个选择是 ImageMagick,但我在其中找不到任何高级的绘画选项(不过,也许我错了)。我听说这可以用 MagickWand 库来完成,但我还没有找到具体的例子。
我也看过 OpenCV,但似乎OpenCV 的 in-paint 方法只接受每通道 8 位图像,而我必须保留 16 位。有没有其他库,甚至是一个有趣的代码片段不知道吗?任何帮助表示赞赏。
样品:
完整的图片

红外通道

防尘防刮面罩

我想要自动删除的内容

我认为太大而无法在没有用户干预的情况下删除的内容

您还可以在此处下载原始 TIFF 文件。它包含两个 Alpha 通道。一个是原来的红外通道,另一个是已经准备好除尘的红外通道。
在大多数脚本语言(例如 Ruby、Python 等)中,包管理器(例如 gem、pip 等)可以将脚本安装为可执行文件并将它们链接到 PATH 变量中引用的目录(例如 /usr/local/bin) . 这会将这些可执行脚本转换为 shell 命令,用户可以在编程界面之外以独立方式运行这些命令。
我想知道 R 中是否也有这种可能性。鉴于 R 使用标准的 Makefile,我想一定有办法做到这一点,尽管是非标准的。我已经知道我们可以使用docopt包读取 R 脚本中的命令行参数。但是有没有办法在安装包时将脚本安装为可执行文件?
在这个主题上有一个领导会很棒,但是来自 CRAN 的一个工作示例也足够了。
我使用的程序运行正常,并在其操作结束时产生理想的输出,没有内存泄漏或任何其他特定问题,但随后它在退出时发出分段错误。在使用此程序时,我一直试图通过将标准错误重定向到 Null 来向最终用户隐藏这个无害但令人讨厌的错误:
program options >file 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
但这不起作用,每次我运行程序时,错误都会出现在脚本输出的中间。这里到底发生了什么,我该如何隐藏不需要的错误?我在优胜美地。
关于为Neo4j优化linux机器有一个非常好的指南.但本指南假定了物理硬盘的典型特征.我在Google CE和Amazon EC2上运行我的Neo4j实例.我无法找到任何详细说明这些虚拟机的最佳设置的文档.在内存(用于堆或扩展使用)和磁盘速度/ IOPS方面,我需要哪些资源才能获得最佳性能?我目前有几百万个节点和大约一千万个关系(2 GB),数据大小随着进口而增加.
在EC2上,我曾经依赖SSD暂存磁盘,然后定期备份到永久磁盘.Compute Engines上没有这样的东西,写入速度对我来说似乎不是很高,至少在正常的磁盘大小(因为速度随大小而变化).有没有办法在我的导入/索引操作上获得合理的性能?或者这些操作可能与内存和计算能力有关?
欢迎任何额外的阅读......
我想根据它们连接的节点的值设置图中一定范围的边的边属性(当然是在 R igraph 中)。
当我检索图形对象中的某个边时,我会得到一个边序列对象:
E(g)[1]
# + 1/2080 edge (vertex names):
# [1] 35->1
class(E(g)[1])
# [1] "igraph.es"
Run Code Online (Sandbox Code Playgroud)
如何从该边缘序列获得实际的边缘?我发现的唯一相关功能是as_ids:
as_ids(E(g)[1])
# [1] "35|1"
Run Code Online (Sandbox Code Playgroud)
然后我必须拆分字符串以获取节点 id,将 id 转换为整数,使用V(g)[x]表示法获取节点,检查我感兴趣的属性,最后设置边缘属性。
这是一个不切实际且浪费的过程。有没有更直接的方法来做同样的事情?
我知道这个%--%符号,在某些情况下,它允许我提前根据节点属性过滤边缘,从而解决了我的问题。但在许多其他情况下,这种表示法没有帮助(当边属性值与节点属性具有更复杂的关系时),我想知道是否有一种更通用的方法可以从一个边序列到相应的一对节点。
neo4j ×3
r ×3
cypher ×2
graph ×2
amazon-ec2 ×1
bash ×1
datetime ×1
deployment ×1
disk ×1
dplyr ×1
dump ×1
edges ×1
executable ×1
fuzzy-search ×1
igraph ×1
image ×1
imagemagick ×1
java ×1
java-8 ×1
lucene ×1
macos ×1
opencv ×1
packages ×1
performance ×1
posix ×1
reshape2 ×1
stderr ×1
tidyr ×1