技术,互联网,eLearning …

Google Reader的中文用户都在分享些啥

上周末写了个抓取程序,用来抓取Google Reader分享的Feed。由于分享的Feed里每一篇被分享的文章都列出了like该文章的用户ID,通过该用户ID可以拼出一个新的分享Feed。这样,以几个用户的分享作为种子,就可以获取大量的用户分享数据。

我的小破电脑吭哧吭哧地抓了一周,主要抓取中文用户的分享,其间又由于有些Feed里含有特殊内容而被connection reset了几次。到了周六早晨,共获得了11万个用户ID,其中,中文用户有2.7万(share或者like过中文文章的用户被认为是中文用户)。从抓取的过程来看,这2.7万用户应该是有过分享行为的中文用户里的绝大多数了。

被share最多的文章和被like最多的文章

对已经获得的数据做统计,被share最多的十篇文章是:

被like最多的十篇文章:

韩寒的文章被分享的次数最多,看来他的文章很对阅读器用户的胃口。另外一个被分享比较多的是可能吧,大家对IT类的科普文章还是很感兴趣的嘛。另外,同被share的文章相比,被like比较多的文章看起来知识性更强一些。

比较有意思的一篇文章是唐龙与藏獒(转),来自土摩托日记,被like和share的次数都很多,从标题上看是一篇转载文,不过用google搜索 “唐龙与藏獒”的时候,都是转帖,反而找不到该文章的原始出处和作者。看来一篇文章要想广为流传,不仅要有好的文章质量和独到的见解,还得借助有影响的媒介来传播。

用户的阅读时间

用户分享的Feed里有一个元素叫做gr:crawl-timestamp-msec,经过验证,这个时间在分享Feed里就是用户分享文章的时间。对这个时间做统计,就可以看出用户在哪些时间里使用阅读器。统计结果如下图:

阅读时间图

除了晚上睡觉的时间,用户在其他时间使用阅读器的频率似乎差不多,只能大约看出中午,晚上6点和晚上10点左右几个高峰期。这说明用户在工作时间也是在使用Reader的?

分享的长尾

对所有文章的分享次数做统计,最后得到一张图,很明显这张图与长尾理论的观点相符合。

分享的长尾

横轴代表文章,纵轴代表文章分享次数。少数文章被大量的分享,而大多数文章则只有一两次分享。

用Scala写了一个简单的分词工具

起了个名叫做segcala, 地址 http://segcala.googlecode.com。

这几天对Scala比较感兴趣,看了一些资料,不过语言这东西光看不练还是没感觉,就写了这样一个分词程序。使用了Chih-Hao Tsaimmseg分词算法。做为依赖注入的粉丝,程序里使用了google guice做为依赖注入容器。

Scala在JVM上的运行效率可以达到和Java差不多的程度。做为同时支持面向对象和函数式编程思想的语言,其强大的表达能力则是Java所忘尘莫及。

以mmseg算法中求一个chunk的自由语素度的代码为例,看看Scala如何使程序变得更加简捷和清晰:

Scala版:

def largestSumMorphemicFreedomDegreeRule(chunks: List[Chunk]): List[Chunk] = {
    val c = chunks.reduceLeft((c1, c2) => {if (c1.degreeOfMorphemicFreedom > c2.degreeOfMorphemicFreedom) c1 else c2})
    chunks.filter(chunk => (chunk.degreeOfMorphemicFreedom == c.degreeOfMorphemicFreedom))
}

再看看Java版(取自solo L的mmseg库):

public class LSDMFOCWRule implements IRule {/* (non-Javadoc)
 * @see org.solol.mmseg.core.IRule#invoke()
 */
public final IChunk[] invoke(final IChunk[] chunks) {
    LSDMFOCWRuleComparator[] orderedChunks = new LSDMFOCWRuleComparator[chunks.length];

    for (int i = 0; i < chunks.length; i++) {
        orderedChunks[i] = new LSDMFOCWRuleComparator(chunks[i]);
    }

    Arrays.sort(orderedChunks);

    int index = 0;
    double degreeOfMorphemicFreedom = orderedChunks[index].getChunk().getDegreeOfMorphemicFreedom();

    List list = new ArrayList(1);
    list.add(orderedChunks[index].getChunk());

    index++;

    while (index < orderedChunks.length) {

        if (orderedChunks[index].getChunk().getDegreeOfMorphemicFreedom() == degreeOfMorphemicFreedom) {
            list.add(orderedChunks[index].getChunk());
        } else {
            break;
        }
        index++;
    }

    IChunk[] degreeOfMorphemicFreedomChunks = new IChunk[list.size()];
    list.toArray(degreeOfMorphemicFreedomChunks);

    return degreeOfMorphemicFreedomChunks;
}

static class LSDMFOCWRuleComparator implements Comparable {

    private IChunk chunk;

    public LSDMFOCWRuleComparator(IChunk chunk) {
        this.chunk = chunk;
    }

    public IChunk getChunk() {
        return chunk;
    }

    public int compareTo(Object obj) {
        IChunk another = ((LSDMFOCWRuleComparator) obj).getChunk();

        double temp = another.getDegreeOfMorphemicFreedom()
                - chunk.getDegreeOfMorphemicFreedom();

        if (temp > 0D) {
            return 1;
        } else if (temp < 0D) {
            return -1;
        } else {
            return 0;
        }
    }
}

Web 2.0下的知识分享

上面这幅图来自这篇文章:Mosh Pit as Innovation Model

长期以来,知识是一种财富,掌握在少数人手中,很多“专家”乐此不疲的囤积知识,生怕别人偷走他们的想法。Web 2.0改变了这一切,我们可以看到,知识传播不在是少数知识所有者的专利,而是形成了一个知识网,每个人都可以成为知识分享者。

Karl Nelson提出了“开源知识(Open Source Knowledge)”的概念:“信息过时的速度是非常快的,特别是在技术领域,如果你将其存在你的头脑中不会产生什么价值,保存其价值的最好的办法是与他人共享你的知识 ”。

但是想真正使教育适应这一变化很难,这需要观念上的改变,教育本身就有一定的惰性,短时间内很难改变。但是对于那些出生于数字时代的小孩来说,他们都是数字原住民,他们习惯了网络,习惯了从网络上获取和分享。只是我们的老土教育还在束缚着他们。

返回顶部