小编vic*_*ooi的帖子

比较和匹配来自不同商店/供应商的产品名称

我正在尝试编写一个简单的程序来比较不同供应商的产品价格.不同供应商可能会将同一产品称为不同的东西

例如,以下三个字符串指的是同一产品:

  • A2全脂奶瓶2升
  • A2牛奶全脂2L
  • A2全脂牛奶2L

或者以下两个字符串是相同的产品:

  • Ambi Pur Air Freshener Car Voyage 8mL.清新的香草花香. - 每人1个
  • Ambi Pur Air Freshener Voyage Primary 8ml

此外 - 有些产品不一样,但相似(例如,Full Cream 2L Milk可能包含各种类似产品.)

我对每个产品的唯一信息是标题和价格.

目前推荐的匹配产品字符串的技术是什么?

从我的谷歌搜索和阅读其他SO线程,我发现:

  • 有些人建议使用贝叶斯过滤技术.
  • 有些人建议对所有产品字符串进行特征提取.因此,您可以从产品中提取诸如品牌(例如"A2"),产品("牛奶")和容量("2L")之类的东西,然后在产品之间创建距离向量,并使用类似二元分类器的东西来匹配产品(SVM)被提到).但是,如果没有一大堆规则或正则表达式,我不知道如何实现这一目标?我假设可能有更聪明的无监督学习方法来攻击这个问题?价格可能是我们可以用来计算距离向量的另一个"特征".
  • 有些人建议使用神经网络方法,但是,我在这里找不到具体的代码或示例.
  • 其他人建议使用字符串相似度算法,例如Levenshtein距离或Jaro-Winkler距离.

你会使用上述技术之一,还是会使用不同的技术?

此外,是否有人知道任何示例代码,甚至是这类问题的库?我似乎找不到任何东西.

(例如,我看到有些人在计算大型数据集的Jaro-Winkler距离时遇到性能问题.我希望可能有算法的分布式实现(例如使用Mahout),但是无法找到具体的东西.)

algorithm nlp machine-learning

14
推荐指数
1
解决办法
3917
查看次数

Paramiko和exec_command - 杀死远程进程?

我正在将Paramiko用于tail -f远程服务器上的文件.

以前,我们正在运行此通道ssh -t,但事实证明这种情况很脆弱,并且-t导致我们的远程调度系统出现问题.

我的问题是当脚本捕获SIGINT时如何杀死尾巴?

我的脚本(基于python paramiko模块中长期运行的ssh命令(以及如何结束它们))

#!/usr/bin/env python2
import paramiko
import select

client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('someserver', username='victorhooi', password='blahblah')
transport = client.get_transport()
channel = transport.open_session()

channel.exec_command("tail -f /home/victorhooi/macbeth.txt")
while True:
    try:
        rl, wl, xl = select.select([channel],[],[],0.0)
        if len(rl) > 0:
            # Must be stdout
            print channel.recv(1024)
    except KeyboardInterrupt:
        print("Caught control-C")
        client.close()
        channel.close()
        exit(0)
Run Code Online (Sandbox Code Playgroud)

该脚本Ctrl-C成功捕获了我的结尾.但是,它使tail -f进程在远程系统上运行.

client.close()和channel.close()似乎都没有终止它.

我可以在except块中发出什么命令来杀死它?

远程服务器正在运行Solaris 10.

python ssh signals solaris paramiko

13
推荐指数
3
解决办法
2万
查看次数

Python - 将纳秒的纪元时间转换为人类可读的?

我有一个时间戳在纪元时间纳秒 - 例如13602870030839884721970-01-01以来的纳秒.

Python日期时间对象和转换方法仅支持毫秒精度.

有没有简单的方法将这个纪元时间转换为人类可读的时间?

干杯,维克多

python time

13
推荐指数
2
解决办法
4万
查看次数

使用Python的tarfile时覆盖现有的只读文件

我正在尝试使用Python的tarfile模块来提取tar.gz存档.

我想要提取来覆盖它们已经存在的任何目标文件 - 这是tarfile的正常行为.

但是,我发现有些文件具有写保护功能(例如chmod 550).

tarfile.extractall()操作实际上失败:

IOError: [Errno 13] Permission denied '/foo/bar/file'
Run Code Online (Sandbox Code Playgroud)

如果我尝试从正常的命令行删除文件,我可以这样做,我只需要回答提示:

$ rm <filename>
rm: <filename>: override protection 550 (yes/no)? yes
Run Code Online (Sandbox Code Playgroud)

普通的GNU tar实用程序也可以毫不费力地处理这些文件 - 它只是在提取时覆盖它们.

我的用户是文件的所有者,因此在运行tarfile.extractall之前递归chmod目标文件并不困难.或者我可以使用shutil.rmtree预先吹走目标,这是我现在正在使用的解决方法..但是,这感觉有点hackish.

是否有更多的Pythonic方法来处理tarfile中的只读文件,使用异常或类似的东西?

python overwrite tarfile

10
推荐指数
1
解决办法
5107
查看次数

Python模拟远程尾部-f?

我们有几个应用服务器和一个中央监控服务器.

我们目前正在从监控服务器运行带有"tail -f"的ssh,以便从应用服务器实时流式传输多个文本日志文件.

除了整个方法的脆弱性之外,问题在于杀死ssh进程有时会使僵尸尾部进程落后.我们使用-t来创建伪终端,但它仍然有时会留下僵尸进程,而且-t显然也会导致我们正在使用的作业调度产品出现问题.

作为一个廉价而肮脏的解决方案,直到我们能够获得正确的集中式日志记录(Logstash和RabbitMQ,希望如此),我希望编写一个简单的Python包装器,它将启动ssh和"tail -f",仍然捕获输出,但是将PID存储到磁盘上的文本文件中,以便我们可以在以后根据需要终止相应的尾部进程.

我最初尝试使用subprocess.Popen,但后来实际上实时获取"tail -f"输出问题(然后需要重定向到文件) - 显然会有一些阻塞/缓冲问题.

一些消息来源似乎建议使用pexpect,或pxssh或类似的东西.理想情况下,我只想使用Python,如果可能的话,它包含了库 - 但是,如果库真的是唯一的方法,那么我对此持开放态度.

有没有一个简单的方法让Python用"tail -f"启动ssh,实时将输出打印到本地STDOUT(这样我可以重定向到本地文件),并将PID保存到文件中杀了以后?或者即使我不使用ssh with tail -f,仍然可以在(近)实时流式传输远程文件,包括将PID保存到文件中?

干杯,维克多

编辑:只是为了澄清 - 我们希望在我们终止SSH进程时尾部进程死亡.

我们想从监控服务器启动ssh和"tail -f",然后在我们Ctlr-C那时,远程盒子上的尾部进程也应该死掉 - 我们希望它留下来.通常使用-t的ssh应该修复它,但由于我不理解的原因,它不完全可靠,并且它不能很好地与我们的作业调度一起使用.

因此,使用屏幕来保持进程的另一端不是我们想要的.

python ssh tail

9
推荐指数
2
解决办法
5827
查看次数

Django模板 - 打印以逗号分隔的ManyToManyField,将结果列表排序为dict?

我有一个用于管理期刊文章列表的Django项目.主要模型是Article.这有各种各样的领域来存储文章的标题,出版日期,主题,以及文章中提到的公司列表.(这company是它自己的型号).

我想要一个模板,打印出文章列表,按类别排序,并列出所提到的公司.

但是,我遇到了两个问题.

首先,该company字段是ManyToMany字段.我正在使用alliterable 成功打印这个,感谢这个SO问题=).(很奇怪,allDjango文档中记录了这个可迭代的地方吗?)

列出ManyToManyField中的对象

但是,除了最后一项之外,我想在每个项目之后打印","(逗号后跟空格).所以输出将是:

Joe Bob Company, Sarah Jane Company, Tool Company
Run Code Online (Sandbox Code Playgroud)

并不是:

Joe Bob Company, Sarah Jane Company, Tool Company,
Run Code Online (Sandbox Code Playgroud)

你如何用Django的模板系统实现这一目标?

其次,每个Article都有一个名为CharField,category用于存储文章的类别.如果可能的话,我希望文章按类别排序.所以我使用QuerySet,并在article_list中获得一个很好的相关文章列表.然后我使用regroup模板标签将其分类并打印每个类别.

{ 'tennis': ('article_4', 'article_5')
  'cricket': ('article_2', 'article_3')
  'ping pong': ('article_1')
}
Run Code Online (Sandbox Code Playgroud)

但是,在将其传递给之前,我需要确保我的输入列表已排序regroup.我的问题是,使用dictsorttemplate-tag在模板内对它进行排序是否更好,或者我应该使用QuerySet的order_by调用?

我认为最好使用它regroup,而不是试图在视图中用Python编写代码?

干杯,维克多

python django django-templates

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

自制Python并写入/Library/Python/2.7/site-packages/?

有没有关于如何正确安装Homebrew Python的权威指南,以及pip,virtualenv,virtualenvwrapper等?

我已阅读以下页面:

https://github.com/mxcl/homebrew/wiki/Homebrew-and-Python
http://osxastrotricks.wordpress.com/2012/05/02/python-setup-with-homebrew/
http://skipperkongen.dk/2011/11/13/installed-django-in-virtual-environment-on-mac/
http://www.thisisthegreenroom.com/2011/installing-python-numpy-scipy-matplotlib-and-ipython-on-lion/
http://youshoulddoityourself.blogspot.com.au/2010/11/test.html

我有OSX 10.8(Mountain Lion)DP3,我安装了XCode命令行工具.

我也安装了XQuartz,以防万一(10.8没有提供).

然后我跑了:

brew install python  --universal --framework
Run Code Online (Sandbox Code Playgroud)

我在笔记上添加了以下内容~/.bash_profile:

export PATH="/usr/local/bin:/usr/local/share/python:${PATH}"
Run Code Online (Sandbox Code Playgroud)

然后我跑了:

sudo easy_install pip
Run Code Online (Sandbox Code Playgroud)

这似乎工作.

我查看pip的安装位置:

 Victors-MacBook-Pro:~ victorhooi$ which pip
/usr/local/bin/pip
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试pip安装包时,我收到一个错误,抱怨无法写入/Library/Python/2.7/site-packages:

running install_lib

creating /Library/Python/2.7/site-packages/yolk

error: could not create '/Library/Python/2.7/site-packages/yolk': Permission denied

----------------------------------------
Command /usr/bin/python -c "import  setuptools;__file__='/Users/victorhooi/build/yolk/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/gg/m37t1rkx4zj7z54ls487jfc40000gn/T/pip-ap7LSB-record/install-record.txt failed with error code 1 in /Users/victorhooi/build/yolk
Storing complete log in /Users/victorhooi/Library/Logs/pip.log
Run Code Online (Sandbox Code Playgroud)

我的理解是Homebrew的Python会安装到它自己的站点包中,而且我不需要在文件系统树上做奇怪的chown来让事情发挥作用?

干杯,维克多

python homebrew

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

使用Django-Jython和Tomcat进行部署?

我有一个Django应用程序,我们正在尝试使用django-jython部署到Tomcat服务器.

为了测试一下,我已成功为一个空的Django应用程序创建了WAR存档文件.测试Django应用程序称为"主席".

我们的Tomcat服务器显然不喜欢WAR归档文件,所以我爆炸(解压缩),并将这些文件复制到服务器.

网络服务器管理员为我创建了一个上下文,以及该上下文的目录(mediatracking).

我已将WAR存档中的文件复制到该目录中,我不太确定如何让该测试应用程序"运行"?

\mediatracking
 - application.py 
 - application$py.class 
 \WEB-INF 
   web.xml 
   \lib 
    - jruby-extras-fileservlet.jar 
    - jython.jar 
   \lib-python 
     - Lib.pth 
     - README 
     \chair 
     \django 
     \doj 
     \Lib 
Run Code Online (Sandbox Code Playgroud)

(我没有低于chair/django/doj/Lib目录中的那个.)

上面的目录结构中是否有任何明显的缺失?

我究竟如何让Tomcat服务器真正"运行"这个应用程序?如果你去上下文目录它不会自动运行(并且那里只有一个application.py和application $ py.class文件,所以我不确定它会如何).

我是否需要让我的网络服务器管理员对web.xml文件执行某些操作?我检查了一下,似乎没有任何东西可以帮助这个应用程序运行:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>chair</display-name>
  <description>
   chair through WSGI with modjy
  </description>
  <context-param>
    <param-name>files.prefix</param-name> <!-- Needed by fileservlet -->
    <param-value></param-value>
   </context-param>
  <servlet>
    <servlet-name>modjy</servlet-name>
    <servlet-class>com.xhaus.modjy.ModjyJServlet</servlet-class>
    <init-param>
      <param-name>reload_on_mod</param-name>
      <param-value>1</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>fileservlet</servlet-name>
    <servlet-class>org.jruby.webapp.FileServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>fileservlet</servlet-name>
    <url-pattern>/media/*</url-pattern>
  </servlet-mapping> …
Run Code Online (Sandbox Code Playgroud)

django tomcat jython

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

使用Twitter Storm处理日志数据?

我们在多个数据中心的许多机器上分布了大量应用程序.

在一天中,我们将收到信号(内部或外部),这会在每个应用程序中引发一系列事件.

因此,每个信号产生大量的事件日志数据.日志本身并不是特定的结构,它们在应用程序之间也有很大不同.他们确实遵循基本惯例:

<timestamp> <calling function/method> <payload>
Run Code Online (Sandbox Code Playgroud)

我们在日志中有ID号可以帮助将事件链接到一个信号 - 但是,这些并非万无一失,我们有时需要使用其他方法来尝试将事件拼凑在一起.

我一直在阅读有关Twitter的Storm系统的内容,我非常有兴趣尝试实时分析这些大量的日志数据并将其拼凑在一起.

我想做的事情如下:

  • 实时生成基于数据趋势的报告和流图.
  • 查询信号,然后在所有应用程序中显示与该信号相关的整个事件链,包括链中步骤之间的延迟.(这个很重要).
  • 查看相关事件,并深入了解特定事件发生时应用程序正在执行的操作.

获取数据?

日志数据存储在本地日志文件中(这不太可能改变),因此我们需要一种方法将数据插入到Storm本身.日志文件也可能被压缩.我对使用Flume或Logstash感兴趣 - 人们对这些有什么看法?或者有没有其他方法可以与Storm一起使用?

存储活动?

我还需要一种方法来存储实时报告和图形的数据,以及事件数据本身.

这是我发现有点棘手的第二部分 - 哪种存储后端适合存储事件,以及它们之间的链接?某种图形数据库是否合适,其中一种新的无模式NoSQL,或者更传统的东西?

风暴适合吗?

最后,Storm适合这个角色,还是更合适的东西?

如果我选择Storm,我可以用什么方法来解决这个问题呢?我希望其他人有类似问题集的经验.

干杯,维克多

logging bigdata apache-storm

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

在PySNMP中查询数字OID?

我正在尝试用Python查询Cisco路由设备上的SNMP变量,并且正在苦苦挣扎.

我有一个正常的snmpwalk命令:

$snmpwalk -v2c -c <our_community_string> <device_ip_address> 1.3.6.1.4.1.9.9.42.1.2.10.1.1.950
SNMPv2-SMI::enterprises.9.9.42.1.2.10.1.1.950 = Gauge32: 68
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用pysnmp在Python中做同样的事情.

我尝试使用基于这里的示例的东西 - http://pysnmp.sourceforge.net/examples/current/index.html - 但得到了一个SmiError:

In [1]: from pysnmp.entity.rfc3413.oneliner import cmdgen

In [2]: cmdGen = cmdgen.CommandGenerator()

In [3]: errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
...:     cmdgen.CommunityData('0pe3aro'),
...:     cmdgen.UdpTransportTarget(('10.65.113.28', 161)),
...:     cmdgen.MibVariable('1.3.6.1.4.1.9.9.42.1.2.10.1.1.950', 0)
...: )
Run Code Online (Sandbox Code Playgroud)

但我得到以下内容:

SmiError: MIB file "1.3.6.1.4.1.9.9.42.1.2.10.1.1.950.py[co]" not found in search path
Run Code Online (Sandbox Code Playgroud)

基本上 - 我想在NetSNMP中保持平衡,但在PySNMP(http://ben.akrin.com/?p=1234)中.

有人知道在PySNMP中查询数字OID的简单方法吗?

干杯,维克多

python snmp

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