Python 的编码问题

使用 Python 最烦的就是处理编码问题,有几点体会:

0、所有数据一律编码为 UTF-8,这样较为合适

1、 Windows 默认的编码不是 UTF-8,使用 open() 函数读写文件的时候如果不指定编码就容易出问题。 建议使用 open(FILENAME, ‘r’, encoding=’utf-8′) 这种形式

2、Python 2 默认的编码不是 UTF-8,使用前先指定编码:

import sys

reload(sys)

sys.setdefaultencoding(‘utf-8’)

即便如此,如果输入不是 utf-8 编码的数据,在经过字符串相关函数处理后,返回的结果仍可能是 ANSI 格式,特别是和字符串常量混在一起运算的时候。这是 Python 2 最大的问题之一。

 

3、 Python 3 默认的编码是 UTF-8,建议使用 Python 3

4、文本数据在使用 encode 函数编码之后,输出到文件或者数据库时要用 decode 函数解码,否则很可能会发现最后输出的数据是二进制形式的,需要再次读取后用 decode 函数解码。

5、unicode 没有所谓的“标点符号”字符集,只能在沿用 string.punctuation 的基础上自己加入想要的字符。 或者使用正则表达式选择文本中想保留的字符

6、print 函数在控制台输出的编码格式是由控制台的编码决定的。 比如 Windows 中文版使用的是 ANSI 编码,因此如果 print 函数要输出一个 UTF-8 编码的数据,很可能会遇到错误 (比如\xe6 这样的字符),因此输出的时候需要改为形如  print s.encode(‘utf-8′,’ignore’)。(print 函数遇到二进制编码的文本数据时会自动解码)

适合当夜宵的食物

一个人居住,夜深的时候难免孤独寂寞冷,如果这个时候肚子饿,那就更惨了。这两年试过不少食物当作夜宵,略有心得,在这里分享一下。

速食和面包:

面包、汉堡包、三明治等:吃腻了。

麦片巧克力:不宜长期吃,适合旅行或运动中补充能量,因为很便宜

康师傅红烧牛肉面:不合适,过于重口,而且味道会布满整个房间。吃久了会腻

统一都会小馆和冠军榜·兰州牛肉面:味道不错,但是不适合作为长期夜宵。同样过于重口。另外都会小馆和冠军榜的区别似乎只是在于冠军榜有牛肉。。。

日清合味道海鲜口味:较为合适。味道略清淡,吃完肠胃不会有太大负担

寿桃鲜虾云吞口味:较为合适,但是面身碱味较重,有的人可能不喜欢。

康师傅鲜虾鱼板面:很合适。胡椒开胃,海鲜汤底清淡。缺点是有一定气味,需要开窗通风一下。

康师傅香菇炖鸡面:不太合适,比较油腻。

泰国艾米(iMEE)方便面:汤头优秀,但是面条较硬,不吸汤。

所有咖喱味方便面:不合适,味道很重,肠胃负担重。

魔芋方便面:非常不合适。。。虽然热量很低,但是特别不好吃。本人试吃过某品牌菌菇口味魔芋方便面,入口即想吐。非常佩服那些每天吃着减肥的女生,还苦中作乐地留下不少态度积极的商品评论

冲泡速食汤:虽然味道不错,但无饱腹感,等于没吃任何东西。

零食类:

坚果(花生、核桃、松子、杏仁等等):因为太硬,吃完容易导致牙龈发炎,要刷牙

萨其马:太甜了,如果是连续熬夜可以考虑吃一个补充能量,平时就算了。

核桃酥、杏仁酥等等:太甜了,热量惊人。。。建议每次最多吃两个

烤海苔:一般。感觉比较上火,而且吃了无饱腹感,摄入盐分又比较多。

素食(腌制杏鲍菇、素肉、豆腐干等等):淘宝上卖的大部分都是烧烤、麻辣口味,晚上吃对口腔不利。不宜多吃。

牛肉制品(腌制牛筋、牛腩、牛百叶、牛肉等等):不适合当主要食物,另外盐分过多。适合加入方便面

腌制海鲜类(带子、扇贝等等):容易变质,不好储存。不合适。

需要自己下厨的:

煎蛋:比较油腻,不建议。

水煮蛋:推荐。容易做而且有饱腹感。

水饺:根据饥饿感决定。个人不喜欢夜宵吃太多东西。另外分享个小技巧:可以冷水下饺子,这样能保证饺子皮和饺子馅一块熟。

芝麻、花生汤圆:偶尔想吃甜的时候可以考虑,单身狗福利。

方便面:比较浪费时间,但是吃起来会有一点幸福感

挂面+各种酱(老干妈、饭扫光等等):比较油腻,口味较重,其实不太推荐。

炒饭:对于夜宵来说过于隆重了。最好是葱油口味,加青葱和火腿丁。吃起来比较香

螺狮粉:不容易调味,容易过咸或者过辣,比较考验厨艺。

其他种类或高难度夜宵:没吃过或者不会做,不评了。。

我比较欣赏的NLP/IR学者

这里列举的都是已经功成名就或者有一定声望的学者

林钦佑 (Chin-yew Lin):我一直以为微软的“小冰”算数学题的功能是用了很复杂的自然语言理解技术,看了论文以后才明白,他叫了几个RA收集网上解题网站的数据,然后用统计学习的办法提取解答过程的文本特征,生成一些特定的解答模板(未知数和方程)。遇到新的查询的时候,先查找最相似的解答模板,然后把数值填进去,最后解方程得到答案。 这种巧妙避开难点曲线救国的壮举如同欧拉应用韦达定理到无穷级数方程得到巴塞尔问题的解

吕正东:比较喜欢他在利用神经网络处理NLP和IR问题时候采用的符号主义思想。国内很多的研究人员满脑子都是向量表示+神经网络,然后把解决问题的方法论归结到调整神经网络中各种奇怪的激活函数和网络结构。

W. Bruce Croft:有很多基础性的工作。很多人对他的印象停留在十年多前向量空间模型大行其道的时候,其实他们组也探索了不少利用新的表示法的检索模型(比如  paragraph2vector 和 PRMS),虽然结果都不是很理想

Krisztian Balog:巴主席把正常人能想到的 entity retrieval model 都做了一遍。。。。每次我想到一个新的想法要实现的时候,我都很兴奋。几个月之后,当我得到一些结果的时候,发现他和他的马仔已经把论文拿去某个会议投稿了。。。。大大提升了我延期毕业的风险

碳纤维车架的山地车

在 2015 年来香港的时候,我花了半年时间组了一台山地车。 主要目标是组碳纤维车架的山地车,并且价格要压得尽量低。 为了达到这两个目标,我每天都关注闲鱼和百度的二手车交易贴吧。 蹲守了很久,终于搞到了一个二手的碳纤维车架。加上一些全新的国产部件,这辆车终于攒起来了。

配置如下

车架: Bulls Black Adder 29  21寸车架, 二手 1300元

前叉: Suntour 2015款 肩控 黑

轮组:DP20 黑圈+ Shimano M615 花鼓 自编轮组

变速套件:微转 Microshift XLE   3 x 10 速套件

刹车: 二手坏掉的 Avid BB7 + 国产修补件 修好

把组三件套: Future 660mm 燕把, TOSEEK 6度 60mm 把立, 国产山寨碳纤维 30.8 x 400mm 座杆

牙盘: PROWHEEL 浩盟 TEN 651    10速牙盘

中轴:淘宝店“单车直入” BB86/90/91/92 压入式五通BB轴 (。。。。。。如果读者看到这表示无语,我很能理解)

线材:各种国产特氟龙线、L3注油线管之类

刹车盘:Shimano SM-RT54

轮胎:KENDA 建大内外胎   26 x 1.5 , 48mm 加长美嘴

脚踏:AEST  YRPD-11T/CR 钛合金培林轴

坐垫:维乐 VELO 3147

 

车架是在闲鱼上联系了一个深圳的卖家,然后晚上八点到火车站面交。 他表示这个车架实在卖不出去所以才这么低价甩货(淘宝上比较正规的碳架起码也要 1800 元左右)。 另外交易的时候这位大哥对我的身高表示了关切,他觉得以我的个头 21 寸 车架可能过大了。  这提醒了我,所以接下来选择前叉和把组三件套的时候我都预先计算了一下最合适的尺寸(假设上半身前倾30度,上半身、手臂、车座和燕把的连线 三者构成一个三角形,最后计算出车座和把立的高度以及前倾角度,这是多解问题,所以可以把常见的尺寸带进去,然后找出合适的方案)。

第一次用这么高端的碳纤维车架组车,遇到了不少麻烦。

车架的五通要求中轴长度是92mm。 中轴的套筒(因为五通表面是很粗糙的所以要放个套筒,这样踩车的时候中轴才转得起来)放进去以后会发现长度根本不够覆盖整个五通,最后只能把那个套筒放在五通的中间,然后两边留出相等距离,最后把中轴压进去。所幸没有异响。

微转的变速器真是太难调了,花了我一周慢慢的揣摩松紧度,说明书看了一遍又一遍,Shimano的说明书也参考了不少。建议去网上找Shimano的变速器安装视频,一边看一边照着做,效率会高很多。 有些紧线之类的小细节以前组车的时候我都没有注意到。

调好以后手感一流,换挡的时候手指也不太费劲。百度山地车吧的那群败家仔永远不懂得物美价廉的道理,只知道花别人的钱然后大言不惭地告诉后来者“一分钱一分货”

DP20车圈非常难装上车胎,感觉车圈不够宽,轮边不够高,很难包住轮胎,用废了我两根塑料撬胎棒

BB7 修起来其实挺容易的。 修复(换件+补漆)以后的效果大概有原厂90%左右的水平

现在国内工厂的山寨水平越来越高了,配件质量越来越好。 如果不是信仰知识产权,我可能会全部选择山寨配件。

 

最后说下驾驶感受

香港的单车道大部分都是平路,骑山地车感觉比较一般。 当然这车比较轻,所以超车还是很容易的,加速不错。 另外香港人喜欢买整车,像我这种自己组车的不多,乱七八糟的件组在一起,在路上挺拉风的。

Install PyLucene 6,7,8 on Windows 10 64bit

update 2021.10: minor fixes. Tested OK with PyLucene 8.9

update 2019.10: add support for PyLucene 8.1.1

update 2019.03: add support for Pylucene 7.7.1+ and clarify some steps

update 2017.07: add support for Python 3

 

Prerequisites

Install Python 2.7.x or Python 3.4+ or Anaconda (Python 2.7.x or Python 3.4+)

Install python packages: numpy, scipy and gensim

Install JDK 1.8 (64 bit) and set environment variables

*The latest JDK 1.8.x is recommended

*JDK 10+ may be incompatible

*Anaconda is recommended since some people seems to have difficulties with raw Python

*If you use raw Python instead of Anaconda, then you may need to add environment variables such as PYTHONHOME and PYTHONPATH to ensure that python can be called on command-line prompt. For Anaconda user, it is recommended to use Anaconda prompt.

  1. JAVA_HOME=C:\jdk1.8.0_06 (or other path)
  2. add %JAVA_HOME%\bin to PATH
  3. CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
  4. add CLASSPATH as an environment variable
  5. add %JAVA_HOME%\jre\bin\server to PATH
  6. Install one of the following libraries subject to your environment:
  • Visual C++ library for Python 2.7
    • (www.microsoft.com/en-us/download/details.aspx?id=44266)
  • Visual C++ 2015 Build Tools for Python
    • (http://landinghub.visualstudio.com/visual-cpp-build-tools)
  • Visual Studio 2015+  (community version is enough. Choose c++ related tools and all versions of SDK to install in the VS installer)
    • (https://visualstudio.microsoft.com)

Step 1. Install Apache Ant and set environment variables
1. specify ANT_HOME and add ANT_HOME as an environment variable
2. add %ANT_HOME%\bin to PATH
Step 2. Install cygwin 64 and set environment variables
0. When installing cygwin, choose “Devel” from “Default” to “Installed”
*the space of all packages under “Devel” category are quite large (30~70 GB). “Default” with some basic gcc/g++ tools, libraries and make/cmake utilities are already enough for PyLucene installation.
*choose “Debug” from “INSTALL” to “Unstall” or “Default” can save a lot of space.

1. specify CYGWIN_HOME and add CYGWIN_HOME as an environment variable
2. add %CYGWIN_HOME%\bin to PATH
restart your computer

 

Step 3. Download source code of PyLucene and extract, we obtain a directory named ‘PyLucene-6.5’
* For PyLucene 7 user, the latest Pylucene 7.7.1 is recommended because
the previous PyLucene 7.x may encouter errors during the installation
process.

Step 4. Open Anaconda prompt, execute command under directory JCC
1. python setup.py build
2. python setup.py install
restart your computer
for Linux user, edit line 71 of setup.py to specify your JAVA home (For example, ‘linux’: JAVAHOME) or simply set a JCC_JDK environment variable sharing same value with JAVA_HOME.

Step 5. Edit PyLucene-6.5/Makefile

first comment the default configuration (by adding ‘#’) like the following
# Mac OS X 10.12 (64-bit Python 2.7, Java 1.8)
#PREFIX_PYTHON=/Users/vajda/apache/pylucene/_install
#ANT=/Users/vajda/tmp/apache-ant-1.9.3/bin/ant
#PYTHON=$(PREFIX_PYTHON)/bin/python
#JCC=$(PYTHON) -m jcc.__main__ –shared –arch x86_64
#NUM_FILES=8

And then insert the following configuration (the following are just examples)

PREFIX_PYTHON=D:/Progra~2/Anaconda2
ANT=D:/apache-ant-1.9.7/bin/ant
JAVA_HOME=C:/Progra~1/Java/jdk1.8.0_101
PYTHON=$(PREFIX_PYTHON)/python.exe
JCC=$(PYTHON) -m jcc
NUM_FILES=8

*for PyLucene 8 installation, set NUM_FILES=10. If encounter [WinError 267] when executing ‘make install’, execute ‘make clean’ and then ‘make install’ again.

*if the path contains blank space, you need to replace it by dos path like ‘C:/PROGRA~1’

*if you create a Anaconda environment, then change PREFIX_PYTHON to the root directory of this environment. (e.g Anaconda2/envs/ENVIRONMENT_NAME)

 

Step 6. Execute command ‘make’ under directory ‘PyLucene-6.5.0’ to build the whole project

*use command “make -j2” or “make -j4” to speed up

Step 7. Execute command ‘make install’ under directory ‘PyLucene-6.5.0’

 

Frequently Encountered Problems
1. Python (actually ‘setuptools’ package) cannot call Visual C++ (MSVC) to compile the project
solution: Rewrite PYTHON_PATH\Lib\distutils\distutils.cfg like the following
[build]
compiler=msvc

[build_ext]
compiler=msvc

2. It fails when compiling JCC
solution: open setup.py and
find line ‘win32’: [“/EHsc”, “/D_CRT_SECURE_NO_WARNINGS”],
replace this line by

‘win32’: [“/EHsc”, “/D_CRT_SECURE_NO_WARNINGS”,”/bigobj”],

3. [WinError 267] the directory name is invalid

replace NUM_FILES=8 by NUM_FILES=10 in Makefile.

execute ‘make clean’, and then execute ‘make’ to compile the whole project again

4. JCC_JDK not found (may encounter on Linux)

set “JCC_JDK” as environment variable. The value is  same as JAVA_HOME

5. encounter “dynamic mode does not define module export function” when “import lucene” in Python prompt (may encounter on linux)

remove lucene and jcc packages by execute “pip uninstall lucene” and “pip uninstall jcc”

edit pylucene-6.5/jcc/setup.py. replace the line 71 by ‘linux’:JAVAHOME,

remove jcc/build folder and execute “make clean” under pylucene-6.5 directory.

install jcc and pylucene again

狠话集

  1. 我过得很低调很朴素,但不代表我很穷。有些话不想说得过于直白,自重。
  2. 早生十年或者晚生十年,我都功成名就。偏偏生在这承上启下的时代,干着扛旗的活。
  3. 有的人读了乔治奥威尔之后,一辈子都出不去,活在恐惧里。

对最近中国大陆房价上涨迅猛现象的思考

那些想用房产税来抑制房价的人要明白,就是收100%的税也不会改变效用序数,这个道理太简单。现在这情况明显就是各生产要素的边际利润严重不均。 原因的话我觉得主要是政府失灵,市场失灵是副产品。 不破不立,有些稳定不稳定的东西考虑太多了就永远放不开手脚,去年证监会推出的熔断机制很明显就是这个思维指导下的产物。

过敏性鼻炎(鼻敏感)病因探索与保养经验

声明:本文仅供参考,本人非持牌医师,不提供任何治疗意见。请遵医嘱进行治疗。因为阅读本文进行尝试而导致的任何人身伤害,本人不负任何责任

博主曾经长时间受敏性鼻炎困扰。 现在分享自己对发作原因的探索(以下每个原因我都用简单的控制变量法尝试过)

  1. 花粉、空气中的粉尘和空气质量: 这三个都是常见的病因,要判断是否由这些原因引起很简单,只要买一至两个空气净化器放在卧室里 24 小时不停工作,然后看看自己的症状是否减轻。记得要连续试验一到两周,因为开始时可能会有心理暗示导致一些激素分泌方面的异常从而减缓症状。(其实有不少减轻流鼻涕症状的药物的主要成分是激素)
  2. 晚睡,熬夜:根据我个人的经验,如果每天在凌晨两点之后入睡,早上起床后鼻炎会发作得比较厉害,不停流鼻涕。这其中的原因可能是人体夜间有几个排毒期,如果晚睡会导致免疫系统发生一些变化,从而作出反应。
  3.  天气变化:比如突然转冷或转热,以及空气湿度突然的变化。
  4.  霉菌:这是一个非常隐蔽的发作原因,相当多的鼻炎患者没有注意过这一点。  霉菌产生的孢子弥漫在空气中,会对鼻炎患者造成很大的伤害。因此如果患有鼻炎,应该检查一下所居住的环境是否出现书籍、墙壁、木制品等物件发霉的现象,一旦确认应该立刻使用专业的除霉剂( 推荐德国的 “伯瑞宝 Poliboy 除霉剂” 这类基于酶催化剂的除霉剂。 用双氧水或者 84 消毒液之类含次氯酸、过氧化氢的清洁液只能去除表面的菌斑不能破坏菌体。) 另外特别要注意的是,如果房间有基于滤网的空气净化器,在除霉后应该立即更换滤网并且消毒机器,不然孢子会附着在滤网上。最简单的实验就是把鼻子凑在空气净化器的出风口,检查自己是否咳嗽不停以及流鼻涕。 基于静电吸附的空气净化器(比如 Lightair) 不会受到影响
  5.  幽门螺旋杆菌:需要说明的是,幽门螺旋杆菌和鼻炎的关系在临床上有待证实,并且学术界出现过一些结论相反的报告。
  6.  螨虫

总的来说,我认为过敏性鼻炎是免疫系统对自身异常,或对异常环境的正常反应。患者应该从免疫这方面去查找病因

一些保养经验:

1、 不要着凉

2、使用盐水洗鼻(非常有效,在未查明真实原因之前,每日早晚洗鼻可以大大缓解症状。 可以使用专用的洗鼻盐,或者选用不含碘的食盐。盐的选择可以参考这篇文章:https://lxsay.com/archives/462

3、 服用药物(建议只在发作剧烈的时候服用,平时通过洗鼻改善状态。药吃多了可能会头晕)

4、去医院做过敏原筛查

5、去医院做幽门螺旋杆菌筛查(医生一般认为幽门螺旋杆菌可治可不治,但我建议如果你深受鼻炎困扰,还是试一下吧)。这种方式起效的原因可能是幽门螺旋杆菌患者一般接受“三联”或者“四联”疗法,需要服用阿莫西林之类的消炎药。消炎药有时可以部分缓解鼻敏感的症状。

6、使用空气净化器(但要勤换滤网)

7、 保持居住环境整洁和干燥,定期检查墙面、床面等是否发霉,若有应除霉和除螨虫。并定期消毒床单、枕头等等,洗衣机如果太脏也可能会引起这类问题

8、(update) 如果居住的房间放有很多书籍或者工具,应该用烘干机先烘干一个小时,擦去表面的尘土和霉斑(如果有),并用保鲜膜或者塑料袋包起来,否则可能会霉菌大爆发。。。。

9、(update) 可以去医院做一个肺部的CT扫描,如果发现部分有一些疑似小结节的组织,建议遵循医生建议,比如吃拜复乐(莫西沙星)、手术切掉,或者继续观察,这也应和了第 5 点观察。