通过user agent信息判断浏览器信息

环境: Ubuntu 14.04

在做广告日志分析有一个字段是user-agent,是Http协议中的一部分,属于头域的组成部分,可以通过该属性来识别出所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。

之前想通过字符串的正则匹配来识别出相应的字段,发现无法做到。后来查找有一个网站提供api能精确识别出来。

代码如下:

#coding:utf-8
#/usr/bin/python2.6

import sys
import urllib
import urllib2
import json
import pprint

ua = “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.4 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.4”
ua_url = urllib.quote(ua)  # 转url编码
url = “http://www.useragentstring.com/?uas=%s&getJSON=all” % ua_url
req = urllib2.Request(url)
j = urllib2.urlopen(req).read()
j = json.loads(j)

print json.dumps(j, indent=4, sort_keys=True)

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(j)

 

中文wikipead数据的LDA预处理

环境:Ubuntu 14.04, Gensim,  jieba

先中文分词:

python -m jieba wiki.zh.text.jian.utf-8 > cut_result.txt

抽取3万个文档:

head -n 30000 cut_result.txt > cut_small.txt

处理脚本如下:

from gensim import corpora

train_data = []
corpus1 = []
corpus2 = []

with open(‘cut_small.txt’, ‘r’) as f:
for i in f.readlines():
train_data.append(list(i.decode(‘utf8’).split(‘/’)))

dic = corpora.Dictionary(train)

corpus1 = [dic.doc2bow(text) for text in train_data]

with open(‘cut_small.txt’, ‘r’) as f:
for i in f.readlines():
corpus2.append([dic.token2id[j] for j in i.decode(‘utf8’).split(‘/’)])

 

数据预处理中英文wikipedia

环境:Ubuntu 14.04, Gensim,

处理脚本process_wiki.py:

 

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import logging
import os.path
import sys

from gensim.corpora import WikiCorpus

if __name__ == '__main__':
    program = os.path.basename(sys.argv[0])
    logger = logging.getLogger(program)

    logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
    logging.root.setLevel(level=logging.INFO)
    logger.info("running %s" % ' '.join(sys.argv))

    # check and process input arguments
    if len(sys.argv) < 3:
        print globals()['__doc__'] % locals()
        sys.exit(1)
    inp, outp = sys.argv[1:3]
    space = " "
    i = 0

    output = open(outp, 'w')
    wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
    for text in wiki.get_texts():
        output.write(space.join(text) + "\\n")
        i = i + 1
        if (i % 10000 == 0):
            logger.info("Saved " + str(i) + " articles")

    output.close()
    logger.info("Finished Saved " + str(i) + " articles")

下载中文和英文的wikipedia
wget https://dumps.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz2
wget https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2

方法一:

python process_wiki.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text

方法二:

Wikipedia Extractor 是用 Python 写的一个维基百科抽取器,使用非常方便。

wget http://medialab.di.unipi.it/Project/SemaWiki/Tools/WikiExtractor.py
python WikiExtractor.py -cb1000M -o extracted  zhwiki-latest-pages-articles.xml.bz2
参数 -b1000M 表示以 1000M 为单位切分文件,默认是 500K。

 

 

将wiki.zh.text中的繁体字转化位简体字:

sudo apt-get install opencc

opencc -i wiki.zh.text -o wiki.zh.text.jian -c zht2zhs.ini

 

处理非utf-8字符

iconv -c -t UTF-8 < wiki.zh.text.jian > wiki.zh.text.jian.utf-8

 

 

 

python 访问某个目录下特定后缀名的所有文件

环境: Centos 5.6  , Python

语句如下:

[os.path.split(f)[1].split(“.”) for f in os.listdir(“/u01/app/bietl/code/bdhi”) if os.path.split(f)[1].split(“.”)[1] == ‘dat’]

/u01/app/bietl/code/bdhi  — 代表目录名
dat  — 代表后缀名
这两个参数可以按你想要的结果传入。

python 无法使用numpy

环境: Ubuntu 12.4

>>> import numpy
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “/usr/lib/python2.7/dist-packages/numpy/__init__.py”, line 137, in <module>
import add_newdocs
File “/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py”, line 9, in <module>
from numpy.lib import add_newdoc
File “/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py”, line 13, in <module>
from polynomial import *
File “/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py”, line 11, in <module>
import numpy.core.numeric as NX
AttributeError: ‘module’ object has no attribute ‘core’
>>>

解决方法:   sudo apt-get remove libopenblas-base

Python PIL图片数据操作

环境: Ubuntu 12.4

模式

1  1位像素,黑和白,存成8位的像素
L  8位像素,黑白
P  8位像素,使用调色板映射到任何其他模式
RGB  3×8位像素,真彩
RGBA  4×8位像素,真彩+透明通道
CMYK  4×8位像素,颜色隔离
YCbCr  3×8位像素,彩色视频格式
I  32位整型像素
F  32位浮点型像素

导入图片处理库
>>>from PIL import Image
加载图片文件
>>>im = Image.open(‘aa.jpeg’)
输出文件的格式,大小,模式
>>> print im.format, im.size, im.mode
JPEG (510, 333) RGB

显示图片
>>> im.show()

白化图片
>>> im.convert(‘1’).show()

获取图片pixel数据
方法一:
>>> import numpy
>>> numpy.asarray(im)[100, 100]

array([254, 167, 175], dtype=uint8)

方法二:
>>> im.getpixel((100, 100))
(254, 167, 175)

方法三:

>>> im.load()[100, 100]
(254, 167, 175)

几何转变提供resize,rotate等方法,用以重定义图片大小,对图片进行旋转等操作。
>>> im.resize((250, 150)).show()
>>> im.rotate(45).show()

图片加强

滤镜
ImageFilter模块提供了很多预定义的图片加强滤镜
>>>import ImageFilter
>>> im.filter(ImageFilter.DETAIL).show()

>>>import ImageEnhance
>>>ImageEnhance.Contrast(im).enhance(1.5).show()

通道
一个图片包含一个或多个数据通道, 如果这些通道有相同的长度和宽度, 可以进入叠加
>>> r,g,b = im.split()
>>>r.sohw()
>>>g.show()
>>>b.show()
>>>im2 = Image.merge(‘RGB’, (b,g,r))

crontab调度Python脚本

环境:Red Hat Enterprise Linux Server release 5.4 (Tikanga),  python 2.7
由于本人对shell脚本语法相当不喜欢,一般与操作系统打交道用python脚本。在用crontab调度python脚有两个地方要注意:
1.  在python脚本中增加#!/usr/bin/env python来声明执行程序在系统环境变量中的名字
2.  在crontab中增加. $HOME/.bash_profile来调用bash_profile来声明环境变量,例: 19 16 * * * . $HOME/.bash_profile;/home/oradev/wget_test.py
注:  文件wget_test.py为可执行状态 — chmod +x wget_test.py
        该文件的目录必须在环境变量PATH 内。
还遇到一问题就是脚本不执行也不报错,最终发现python有两个版本,一个版本在/usr/bin/python是2.4.3,将其删除并指定软链接 ln -s /usr/local/bin/python2.7 /usr/bin/python