0%

本系列的上一篇文章介绍了 NLP 中处理分词的两种方法,其中基于统计语言模型的方法以巨大的优势胜出。

在上一篇文章的末尾,我们讲了优秀的算法模型在形式上应该是简洁优雅的。具体来说:

  1. 一个正确的数学模型在形式上应该是简洁优雅的。
  2. 一个正确的数学模型,在刚开始的时候可能还不如一个经过精心调教的错误模型准确。但是错误模型不论如何调教,因为方向错了,所以终究会有处理不了实际问题的时候。
  3. 正确的数学模型可能因为受到干扰而不准确。此时应该找出干扰、噪音,并解决它们,而不是简单凑合去修修补补。

这篇文章我们继续讲分词和统计语言模型。不过,这次的内容会比上次要深入、深奥,并且会涉及到一些数学推导,以及一些工程上的 Dark Side。不过,其中有些非常 Tricky 的技巧对于大多数读者来说没有必要阅读,而剩下的部分中简单的数学推导也不致枯燥。

阅读全文 »

一个基本的搜索引擎的工作,基本上可以分成以下三个部分:

  1. 利用网络爬虫下载网页,分析网页关键词,制成索引备用;
  2. 理解用户输入,确定检索关键词;
  3. 根据关键词和网页索引,按照相关性排序列出搜索结果。

第一个部分主要涉及网络爬虫技术、图论、自然语言处理等技术;第二个部分主要涉及自然语言处理;第三个部分同样涉及自然语言处理。

自然语言,即是人类用来交流的语言。

由此可见,自然语言处理(NLP, Natural Language Processing)是现代搜索引擎很重要的内容,其终极目的是将自然语言转化为计算机容易处理的形式。

阅读全文 »

使用 QQ 这么多年,管理的群越来越多。现在每天被入群申请搞得烦不胜烦,于是萌生了写一个 QQ 机器人的想法。

要想实现一个 QQ 机器人,首先是要在程序里模拟登录。经过整理,可用的思路有两个:

  • 使用 WebQQ 的方式登录,模拟浏览器的行为;
  • 使用 Android QQ 的方式登录,模拟 Android 客户端的行为。

二者各有利弊。使用 WebQQ 方式登录协议相对简单,网络上也有相关分析;但是 WebQQ 不能与电脑上的 QQ 共存:登录 WebQQ 就会将电脑上的登录踢下线。使用 Android QQ 的方式登录,由于没有现成的资料可供查询,实现起来十分复杂;但是 Android QQ 是手机端 QQ,可以与电脑端 QQ 共存。

「要做就做好」。思前想后,我还是决定使用 Android QQ 的方式登录。于是问题来了,怎样去抓取 Android QQ 的行为呢?

  1. 在 Android QQ 外围进行抓包分析,然后让程序伪装成 Android QQ 向腾讯的服务器发包;
  2. 直接读 Android QQ 的源代码,然后仿照着相关内容重新实现。

方案 1 是常规方法,若能顺利实施,无非是不断重复抓包 - 分析 - 伪造的步骤。不过 QQ 的通信信息是加密处理过的,抓包分析比较费劲。因此,我决定尝试反编译 Android 程序,直接阅读源代码。

这里我介绍反编译安卓程序,得到 Java 代码的详细方法。

请尊重他人劳动成果,勿将此方法用于恶意活动。

阅读全文 »

XeLaTeX 是 eTeX 的扩展。它直接支持 Unicode 字符,并且能够调用安装在操作系统的字体。这些特性解决了以往 TeX 切换字体不便的问题,对于中文 TeX 用户来说,更是福音。

前段时间,TeX Live 更新到了 TeX Live 2015 版本,Mac OS X 上相应的也更新到了 MacTeX 2015 版本。不过此次更新之后,XeLaTeX 却无法通过字体文件名调用系统字体。亦即,下列代码无法通过编译(提示 font-not-found):

1
2
3
4
5
6
\documentclass{article}
\usepackage{fontspec}
\setmainfont{GillSans.ttc}
\begin{document}
GillSans Test.
\end{document}
阅读全文 »

很多书籍在设计版式的时候,会要求 \chapter 从奇数页码开始:上一章节在奇数页结束则留白一页,而后再从奇数页码继续排版。为了避免给读者造成「这里的内容缺失了」的印象,通常会写上「This page is intetionally left blank」的字样。

本文来实现这种效果。

阅读全文 »