Python 一句话抓取百度搜狗的热词

2012年6月19日 由 admin 没有评论 »
  • 需要依赖 python, pyquery

[gist]https://gist.github.com/xddaijun/3115077[/gist]

Google C++规范学习笔记

2012年4月24日 由 admin 没有评论 »
1、对单参数构造函数使用C++关键字explicit    explicit Foo(string name);
2、仅在代码中需要拷贝一个类对象的时候使用拷贝构造函数;不需要拷贝时应使用
DISALLOW_COPY_AND_ASSIGN。应在类的private:中使用,作为类的最后部分。
3、使用static_cast<>()等C++的类型转换,不要使用int y = (int)x 或int y = int(x);
4、dynamic_cast:除测试外不要使用,除单元测试外,如果你需要在运行时确定类型信
息,说明设计有缺陷

5、不要使用流,除非是日志接口需要,使用printf 之类的代替。

6、我们强烈建议你在任何可以使用的情况下都要使用const。
7、尽可能用sizeof(varname)代替sizeof(type)。
8、变量名一律小写,单词间以下划线相连,类的成员变量以下划线结尾

9、变量(含类、结构体成员变量)、文件、命名空间、存取函数等使用全部小写+下划线,
类成员变量以下划线结尾,全局变量以g_开头;
10、普通函数、类型(含类与结构体、枚举类型)、常量等使用大小写混合,不含下划线;
11、只使用空格,每次缩进2 个空格。使用空格进行缩进,不要在代码中使用tabs,设定编辑器将tab 转为空格。
12、头文件顺序:本cpp对应文件、C 系统文件、C++系统文件、其他库头文件、本项目内头文件
13、不能在.h 文件中使用不具名命名空间。
14、结论:不要将嵌套类定义为public,除非它们是接口的一部分,比如,某个方法使用了这
个类的一系列选项。
15、使用Init()方法集中初始化为 有意义的(non-trivial) 数据
16、所以按引用传递的参数必须加上const。

中文分词资料

2011年10月18日 由 admin 没有评论 »

pymmseg-cpp

  • Python 中文分词工具。JavaEye曾经报道过ruby的中文分词程序:rmmseg-cpp这个项目。rmmseg-cpp实际上是用C++来编写的分词,只在最外层和ruby进行了粘合。 现在作者pluskid(张驰原)在rmmseg-cpp的基础上提供了Python的代码封装,可以用在Python项目当中进行中文分词。

paoding

  • Lucene中文分词“庖丁解牛” Paoding Analysis,Paoding’s Knives 中文分词具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。
    高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。
    采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析

SCWS-1.1.7

  • 这是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。词是汉语的基本语素单位,而书写的时候不像英语会在词之间用空格分开,所以如何准确而又快速的分词一直是中文分词的攻关难点。SCWS 在概念上并无创新成分,采用的是自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些中小型搜索引擎、关键字提取等场合运用。 SCWS 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码,切词效率高。
  • 文本自动分类建议系统 http://www.ftphp.com/scws/demo/a.php
  • 在线演示:http://www.ftphp.com/scws/demo/pscws23/demo.php

Ineffable Shopping Guide 介绍

2011年10月10日 由 admin 没有评论 »

Ineffable Shopping Guide 是我们参加微软校园菁英计划之“有求必应”结构化数据搜索是想到的。主要目的还是因为面对那些琳琅满目的商品你是否觉得无从下手,买各种数码产品首先都是到处找该产品的评论信息。我们就准备将这些产品的评论信息进行整合起来,这样就极大的方便了用户,既给了用户想知道的信息,又为用户提供了没有考虑到的信息。下面是我们作品展示的海报。在线Demo展示:http://shopping.daijun.info

large_V5I0_503900007a941260

在线视频:

技术说明

Childsearch—-2010腾讯校园之星作品

2011年10月10日 由 admin 没有评论 »
  • 专为儿童开发的搜索引擎,主要功能有:
  • 拼音搜索功能
  • 自动对输入关键字分类
  • 智能匹配电影、游戏
  • 游戏可以自动播放
作品展示
在线运行

拼音处理资料

2011年10月5日 由 admin 没有评论 »

ibus-sogoupycc

  • 非官方的搜狗云拼音客户端, for Linux/ibus,调用搜狗云端输入法来实现本地拼音客户端。

ibus-cloud-pinyin

  • 为 Linux / ibus 设计的一个支持在线云拼音服务的拼音输入法

pinyin4j

  • convert 中文 to zhongwen.pinyin4j是一个支持将中文转换到拼音的Java开源类库。 支持简体中文和繁体中文字符; 支持转换到汉语拼音,通用拼音,威妥玛拼音(威玛拼法),注音符号。

imewlconverter

  • IME Words Library Converter/深蓝词库转换实现了各种输入法的用户词库、网络词库(细胞词库)之间的相互转换。
    支持的输入法
    目前支持的输入法有: PC端: 搜狗拼音 QQ拼音 QQ五笔(纯汉字) 谷歌拼音 搜狗五笔 紫光拼音 拼音加加 新浪拼音 极点郑码 自定义格式 手机端: QQ手机拼音 百度手机拼音 触宝手机输入法(Android)

中文自然语言处理开放平台

  • 中科院计算机自然语言处理的词库、论文等资料。

Ineffable Shopping Guide 结构化搜索技术介绍

2011年7月28日 由 admin 没有评论 »

介绍说明:http://daijun.info/?p=7041

主要技术:爬虫(Python)+分词(盘古分词)+ Lucene.Net

爬虫代码:https://github.com/xddaijun/Shopping-Guide

利用Python来解析Pcap包

2011年3月23日 由 admin 没有评论 »

Tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

3

这个我在截取的一段Tcpdump的数据包。通常可以采用wireshark来对Tcpdump数据包进行分析。

1

3

从图中大概可以看出每一个tcpdump的数据里面有很多的包,每一个包都有包的head部分和Data部分。其中head部分包括网卡的地址,ip的地址,端口地址,发送时间等等很多信息。在我的工作中需要将包的发送时间、它的目的IP以及发送的数据保存起来。这就需要对tcpdump数据进行分析,提取出有用的信息。

在网上有一个C#版本做的解析Pcap数据包的资料,很有参考价值。读写 cap 文件的 C# 代码(兼容 tcpdump 及 Wireshark)

它的关键代码

#region Constructors
      /// <summary>
      /// 构造一个 Pcap 包捕获读取器。
      /// </summary>
      /// <param name="baseStream">要读取的基础流</param>
      public PacketCaptureReader(Stream baseStream)
      {
          if (baseStream == null)
throw new ArgumentNullException("baseStream");
          if (!baseStream.CanRead)
throw new ArgumentException("传入的流必须为可读。", "baseStream");
          _BaseStream = baseStream;
          m_Reader = new BinaryReader(_BaseStream);
          if (m_Reader.ReadUInt32() != MAGIC)
              throw new FormatException("无效的 PCAP 格式。");
          short versionMajor = m_Reader.ReadInt16();
          short versionMinjor = m_Reader.ReadInt16();
          if (versionMajor != 2 || VersionMinjor != 4)
          {
              throw new FormatException(
string.Format("无法处理的 PCAP 版本 {0}.{1}", versionMajor, versionMinjor));
          }
          _TimeZone = m_Reader.ReadInt32();
          _CaptureTimestamp = m_Reader.ReadInt32();
          _MaxPacketLength = m_Reader.ReadInt32();
          _LinkLayerType = (LinkLayerType)m_Reader.ReadInt32();
      }

      #endregion

      /// <summary>
      /// 读取下一个捕获包
      /// </summary>
      /// <returns>读取的捕获包,如果已经到达尾端,返回 null</returns>
      public PacketCapture Read()
      {
          if (_BaseStream.Position == _BaseStream.Length) return null;
          UnixTime timestamp = new UnixTime(m_Reader.ReadInt32());
          int millseconds = m_Reader.ReadInt32();
          if (millseconds > 1000000)
              throw new InvalidDataException("读取到无效的数据格式。");
          int len = m_Reader.ReadInt32();
          int rawLen = m_Reader.ReadInt32();
          if (len > rawLen)
              throw new InvalidDataException("读取到无效的数据格式。");
          byte[] buff = m_Reader.ReadBytes(len);
          return new PacketCapture(buff, rawLen, timestamp, millseconds);
      }

从中可以看出 每一个tcpdump数据里面都有一个数据格式的head信息,通过读取该部分判断这个数据包的格式。剩下的部分就是我需要的数据包内容了。

我的python代码如下

   1: #!/usr/bin/python2.5

   2: # -*- coding: utf-8 -*-#

   3: import struct

   4: import os

   5: import re

   6: import sys

   7: import time

   8: import socket

   9: def Pcap_check(infile):

  10:     c = infile.read(24)

  11:     if not c:

  12:         return c

  13:     (a,b,cx,d,e,f,g)=struct.unpack('<Ihhiiii',c)

  14:     if a!= 0xA1B2C3D4:

  15:         return False

  16:     print "versionMajor:",b

  17:     print "VersionMinjor:",cx

  18:     print "_TimeZone:",d

  19:     print "_CaptureTimestamp",e

  20:     print "_MaxPacketLength:",f

  21:     print "_LinkLayerType:",g

  22:     return True

  23: def Pcap_read(infile):

  24:     c = infile.read(16)

  25:     if not c:

  26:         return ('',0,c)

  27:     (timestamp,millseconds,len,rawlen)=struct.unpack('<IIII',c)

  28:     timeStruct=time.gmtime(timestamp)

  29:     currentTime=(timeStruct.tm_hour*3600+timeStruct.tm_min*60+

  30:                 timeStruct.tm_sec)*1000+millseconds/1000

  31:     c=infile.read(34)

  32:     source,dest=struct.unpack('<26xII',c)

  33:     source=socket.inet_ntoa(c[26:30])

  34:     dest=socket.inet_ntoa(c[30:])

  35:     infile.read(8)

  36:     c=infile.read(len-8-34)

  37:     return (dest,currentTime,c)

参考资料:读写 cap 文件的 C# 代码(兼容 tcpdump 及 Wireshark)http://www.cnblogs.com/zealic/archive/2008/05/04/1182420.html

tcpdump+python编写的流量监控的脚本 http://blog.csdn.net/kobeyan/archive/2009/07/13/4344192.aspx

dpkt下载地址:http://code.google.com/p/dpkt/downloads/list

pcap下载地址:http://code.google.com/p/pypcap/

GDB学习笔记

2011年2月16日 由 admin 没有评论 »

一些参考网页:
8 gdb tricks you should know
学习使用 GNU GDB Debugger
GDB中应该知道的几个调试方法

用GDB调试程序系列:  http://blog.csdn.net/haoel/archive/2003/07/02/2879.aspx

Two more very useful tricks:

1. Setting hardware breakpoints on data does not slow program execution and stops when the specific variable is modified. Sometimes gdb automatically sets HW breakpoint when you say watch . Sometimes you have to force it by using something like:

set x = &
watch *$x

2. You can set an “ignore count” on any breakpoint using “ignore “. GDB will stop after the breakpoint was hit that many times. The standard way to use this is to set the ignore count very high (say, 9999), run the program till it crashes or otherwise stops after an interesting event, and then use “info bp ” to determine how many times the breakpoint was hit. Then set the ignore count to that number -1 and rerun. The debugger will stop just before the interesting event.

GDB Essential commands

The command set of GDB really is quite concise and intuitive,
so learn it now so you don’t have to when things are going pear shaped!

Command Abbrev Description
set args set command args. Also can do: gdb –args command arg1 …
break b set breakpoint (at function, line number, …)
disable dis disable breakpoints (all by default)
enable en enable breakpoints (all by default)
run r (re)start execution
continue c continue execution
step s next line
next n next line without recursing into functions
finish fin next line after this function returns
until <line> continue execution until line number
list l show source (for line, function, offset, …)
backtrace bt show the stack of functions. Add “full” to include local variables
thread apply all bt t a a bt show the stack of functions in all threads
print var p display a variable. Use p/x for hex
x/16xb <addr> hexdump 16 bytes at address
watch wa break when variable changes value
display disp display expression each time program stops
info locals inf loc display local variables
help … h display online help
focus next fs n switch window (allows cursor keys in CMD window for e.g.)
[Ctrl-x a] toggle the text windowing interface
[Ctrl-L] redraw the display (if program outputs for example)
[Return] repeat the last command

Gratuitous ARP

2011年2月14日 由 admin 没有评论 »

以太网中为什么要用到Gratuitous ARP(以下简称GARP)呢?

第一,主机可以通过GARP向网络发送广播,以告诉整个广播域,目前某个IP所对应的MAC地址是什么——这一行为就像是在发宣传单,而宣传单是不需要回应的。

第二,主机是想看看广播域内有没有别的主机使用自己的IP地址,如果使用了,则在界面上弹出“IP冲突”字样。普通ARP请求报文广播发送出去,广播域内所有主机都会接收到,计算机系统判断ARP请求报文中的目的IP地址字段,如果发现和本机的IP地址相同,则将自己的MAC 地址填写到该报文的目的MAC地址字段,并将该报文发回给源主机。所以只要发送ARP请求的主机接收到报文,则证明广播域内有别的主机使用和自己相同的 IP地址(这里不考虑路由器的ARP代理问题)。免费ARP的报文发出去是不希望收到回应的,只希望是起宣告作用;如果收到回应,则证明对方也使用自己目前使用的IP地址,

Gratuitous ARP could mean both gratuitous ARP request or gratuitous ARP reply. Gratuitous in this case means a request/reply that is not normally needed according to the ARP specification (RFC 826) but could be used in some cases. A gratuitous ARP request is an AddressResolutionProtocol request packet where the source and destination IP are both set to the IP of the machine issuing the packet and the destination MAC is the broadcast address ff:ff:ff:ff:ff:ff. Ordinarily, no reply packet will occur. A gratuitous ARP reply is a reply to which no request has been made.