Archive for 算法-编程

用python写了一个百度贴吧的删帖器

几天前的事了,断断续续也写了几天。用了wxpython写的界面,在ubuntu下写的,在xp下编译成功,win7测试成功。 为防止工具乱用,只支持一个贴吧。代码很多是参考别人的写法,省去了自己阅读javascript的时间,所以总体比较简单,借机大体学习了wxpython,很强大,就是用py2exe编译出来的文件太大了。可能是自己没有优化吧。 现在写程序发现总是调用别人写的代码,神马时候能有水平写个接口让别人用一下T_T..
Read more...

wxpython checklistbox的使用

官网文档:http://www.wxpython.org/docs/api/wx.CheckListBox-class.html 主要用到一个GetChecked(self) Return a tuple of integers corresponding to the checked items in the control, based on IsChecked.
#获取选择的列表,返回一个元组
	    select_list = self.clb.GetChecked()
	    for i in range(len(select_list)):
		#print select_list[i],'...'
		del_url = TIEBA_URL + self.URLList[select_list[i]]
		#print self.sampleList[select_list[i]]
Read more...

django发送json数据并格式化datetime时间数据

用了一个javascript的插件,json传送过来的时间需要是Date对象类型的开始的思路就错了,以为可以直接返回这种类型的数据。差,天真了。后来又看到直接返回含有js语句的json文本,非常不喜欢。就想能不能转成js中Date能识别的格式,哈哈果然有。方法如下: 我用的 ,用json也行哇。views.py里的代码
from django.utils import simplejson

 li = []
    for a in articles:
        article={}
	article["start"] = a.datetime.strftime('%Y-%m-%dT%H:%M:%S')
        article["content"] = a.content
        li.append(article)
    json = simplejson.dumps(li)
    return HttpResponse(json)
其中strftime('%Y-%m-%dT%H:%M:%S') 是格式化为Date对象格式的字符串,方便在浏览器的javascript中转换为Date对象. html文件比较简单判断json的长度 循环变成Date对象,jsvascript
var i=0;
for(i=0;idjango发送json数据并格式化datetime时间数据风波二
Read more...

gtk+吼吼 ,我要来了

我的蹭网时代又来了,回校这段时间基本上什么事没做,django的项目 也没写完,只剩下前端的设计。尽快写完,开始gtk+之路。
Read more...

django 前端时间控件移植记录

在网上找到一篇文章《将django的管理端控件用到前端页面》,写得很详细。自己还需要时间的设定,就粗略的研究了一下django后台admin的时间控件的设置使用。 forms.py文件
from django.contrib.admin import widgets

linetime = forms.DateTimeField(required=True,label='时间',widget=widgets.AdminDateWidget())
head中增加如下代码
 
 



{{ form.media }}
{{ form.media }}添加了两条script语句。 body中添加{{ form.linetime }} widgets.py文件中的几个def: AdminDateWidget,这个是只有日期的时候,在froms中使用。 AdminTimeWidget,这个在只有时间。 AdminSplitDateTime,这个时间和日期都有,按情况选择就OK了。
Read more...

分词字典收集,和程序收集

http://pypi.python.org/pypi/mmseg 拼音加加5.0 Fundset优选词库多音字容错 http://fundset.ys168.com/ python-segment是一个纯python实现的分词库 http://code.google.com/p/python-segment/

其他中文分词项目:什么语言也有

http://judou.org/trac/
Read more...

中文分词搜索词库算法收集

收集了一点资料 字典库:http://www.mdbg.net/chindict/chindict.php?page=cedict 文章:http://iregex.org/blog/simple-nlp-for-chinese.html 中文分词工具包:http://www.iteye.com/news/10746-python-smallseg 代码链接:http://code.google.com/p/smallseg/ 一个搜索算法: SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore)。两个算法在最坏情况下均具有线性的查找时间。但是在实用上,KMP算法并不比最简单的c库函数strstr()快多少,而BM算法则往往比KMP算法快上3-5倍。但是BM算法还不是最快的算法,这里介绍一种比BM算法更快一些的查找算法。 例如我们要在"substring searching algorithm"查找"search",刚开始时,把子串与文本左边对齐: substring searching algorithm search ^ 结果在第二个字符处发现不匹配,于是要把子串往后移动。但是该移动多少呢?这就是各种算法各显神通的地方了,最简单的做法是移动一个字符位置;KMP是利用已经匹配部分的信息来移动;BM算法是做反向比较,并根据已经匹配的部分来确定移动量。这里要介绍的方法是看紧跟在当前子串之后的那个字符(上图中的 'i')。 显然,不管移动多少,这个字符是肯定要参加下一步的比较的,也就是说,如果下一步匹配到了,这个字符必须在子串内。所以,可以移动子串,使子串中的最右边的这个字符与它对齐。现在子串'search'中并不存在'i',则说明可以直接跳过一大片,从'i'之后的那个字符开始作下一步的比较,如下图: substring searching algorithm search ^ 比较的结果,第一个字符就不匹配,再看子串后面的那个字符,是'r',它在子串中出现在倒数第三位,于是把子串向前移动三位,使两个'r'对齐,如下: substring searching algorithm search ^ 哈!这次匹配成功了!回顾整个过程,我们只移动了两次子串就找到了匹配位置,是不是很神啊?!可以证明,用这个算法,每一步的移动量都比BM算法要大,所以肯定比BM算法更快。 文章关键词词频统计算法: 一种基于中文的词频统计算法: 1、将待分析的文本转换成字符串(适用任何类型的字符串) 2、将字符串进行中文分词 3、利用统计字符个数函数得出分词后的文本字符串个数a 4、将待统计的关键词用字符串替换法消除,并且利用步骤3 的函数得出消除关键词后的文本字符处个数b
Read more...

记录几个python的下载地址

MySQL-python for Windows Distributions http://www.codegood.com/downloads python下载地址被墙了,需要vpn,到ftp里面下载就不需要了: http://www.python.org/ftp/python/ python 2.6.7没有for windows版本。
Read more...

今天为django搭建的网站写了一个验证码

查了些验证码的资料,选了一个比较简单的例子,参照着写得不是很好。找了一篇比较经典的收藏了。
TFontAngle=range($this->TFontAngle[0],$this->TFontAngle[1]);
		$this->TFontSize=range($this->TFontSize[0],$this->TFontSize[1]);

		$arr=array();
		$Chars=$this->Chars;
		$TFontAngle=$this->TFontAngle;
		$TFontSize=$this->TFontSize;
		$FontColors=$this->FontColors;
		$code="";
		$font=dirname(__FILE__)."/font/".$this->TFonts[0];

		$charlen=strlen($Chars)-1;
		$anglelen=count($TFontAngle)-1; // 角度范围
		$fontsizelen=count($TFontSize)-1; // 角度范围
		$fontcolorlen=count($FontColors)-1; // 角度范围

		for($i=0;$i<$this->Length;$i++) ///得到字符与颜色
		{
			$char=$Chars[rand(0,$charlen)]; ///得到字符
			$angle=$TFontAngle[rand(0,$anglelen)]; ///旋转角度
			$fontsize=$TFontSize[rand(0,$fontsizelen)]; ///字体大小
			$fontcolor=$FontColors[rand(0,$fontcolorlen)]; ///字体大小

			$bound=$this->_calculateTextBox($fontsize,$angle,$font,$char); ///得到范围

			$arr[]=array($fontsize,$angle,$fontcolor,$char,$font,$bound);  ///得到矩形框
			$code.=$char;
		}
		$this->Code=$arr; //验证码
		return $code;
	}

	public function Draw() ///画图
	{
		if(empty($this->Code)) $this->RandRSI();
		$codes=$this->Code; ///用户验证码


		$wh=$this->_getImageWH($codes);

		$width=$wh[0];
		$height=$wh[1]; ///高度

		$this->Width=$width;
		$this->Height=$height;

		$this->Image = imageCreate( $width, $height );
		$image=$this->Image;

		$back = $this->_getColor2($this->_getColor( $this->BgColor)); ///背景颜色
		imageFilledRectangle($image, 0, 0, $width, $height, $back); ///填充背景

		$TPadden=$this->TPadden;

		$basex=$this->Txbase;
		$color=null;
		foreach ($codes as $v) ///逐个画字符
		{
			$bound=$v[5];
			$color=$this->_getColor2($this->_getColor($v[2]));
			imagettftext($image, $v[0], $v[1], $basex, $bound['height'],$color , $v[4], $v[3]);
			$basex=$basex+$bound['width']*$TPadden-$bound['left'];///计算下一个左边距
		}
		$this->TLine?$this->_wirteSinLine($color,$basex):null; ///画干扰线
		header("Content-type: image/png");
		imagepng( $image);
		imagedestroy($image);

	}

	/**
	 *通过字体角度得到字体矩形宽度*
	 *
	 * @param int $font_size 字体尺寸
	 * @param float $font_angle 旋转角度
	 * @param string $font_file 字体文件路径
	 * @param string $text 写入字符
	 * @return array 返回长宽高
	 */
	private function _calculateTextBox($font_size, $font_angle, $font_file, $text) {
		$box = imagettfbbox($font_size, $font_angle, $font_file, $text);

		$min_x = min(array($box[0], $box[2], $box[4], $box[6]));
		$max_x = max(array($box[0], $box[2], $box[4], $box[6]));
		$min_y = min(array($box[1], $box[3], $box[5], $box[7]));
		$max_y = max(array($box[1], $box[3], $box[5], $box[7]));

		return array(
		'left' => ($min_x >= -1) ? -abs($min_x + 1) : abs($min_x + 2),
		'top' => abs($min_y),
		'width' => $max_x - $min_x,
		'height' => $max_y - $min_y,
		'box' => $box
		);
	}

	private function  _getColor( $color ) //#ffffff
	{
		return array(hexdec($color[1].$color[2]),hexdec($color[3].$color[4]),hexdec($color[5].$color[6]));
	}

	private function  _getColor2( $color ) //#ffffff
	{
		return imagecolorallocate ($this->Image, $color[0], $color[1], $color[2]);
	}

	private function _getImageWH($data)
	{
		$TPadden=$this->TPadden;
		$w=$this->Txbase;
		$h=0;
		foreach ($data as $v)
		{
			$w=$w+$v[5]['width']*$TPadden-$v[5]['left'];
			$h=$h>$v[5]['height']?$h:$v[5]['height'];
		}
		return array(max($w,$this->Width),max($h,$this->Height));
	}

	//画正弦干扰线
	private function _wirteSinLine($color,$w)
	{
		$img=$this->Image;

		$h=$this->Height;
		$h1=rand(-5,5);
		$h2=rand(-1,1);
		$w2=rand(10,15);
		$h3=rand(4,6);

		for($i=-$w/2;$i<$w/2;$i=$i+0.1)
		{
			$y=$h/$h3*sin($i/$w2)+$h/2+$h1;
			imagesetpixel($img,$i+$w/2,$y,$color);
			$h2!=0?imagesetpixel($img,$i+$w/2,$y+$h2,$color):null;
		}
	}
}
DEMO:
$rsi = new Utils_Caption();
$rsi->TFontSize=array(15,17);
$rsi->Width=50;
$rsi->Height=25;
$code = $rsi->RandRSI();
session_start();
$_SESSION["CHECKCODE"] = $code;
$rsi->Draw();
以上代码下载地址是:http://files.cnblogs.com/chengmo/caption_chengmo.zip 作者:chengmo QQ:8292669 出处:http://www.cnblogs.com/chengmo 本文版权归作者和博客园共有,欢迎转载,请务必添加原文链接。
Read more...

python的datetime 和md5加密学习记录

>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2012, 2, 14, 16, 24, 36, 171000)
>>> dir(now)
发现取得时间方法是now.year的方式。
>>> now2 = datetime.datetime.now()
>>> dd=now2-now
>>> dd
datetime.timedelta(0, 209, 938000)
>>> dir(dd)
>>> dd.days
0
>>> dd.microseconds
938000
>>> dd.seconds
209
MD5加密方法:
>>> import md5
>>> v = md5.new('uuuuu').hexdigest()
>>> v
'3c9aa281ced92294f259c0c55520b2cf'
>>> b= md5.new('uuuuu').hexdigest()[16:]
>>> b
'f259c0c55520b2cf'
Read more...

Previous Page 1 2 3 4 5 6 7 8 9 10 Next Page 最后一页