第六章(1.3)自然语言处理实战——使用tf-idf算法实现简单的文本聚类

一、原理

  • 使用jieba切词
  • td-idf计算文本的词频和逆文档词频
  • 排序选出最重要的2个或3个词作为这段文本的id
  • 具有相同id的文本被归为一类

二、使用python实现简单的文本聚类,其中使用了tf-idf算法,jieba分词,把相似的文本聚合在一起

  • keyword_cluster.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import time
import re
import jieba.analyse
import util as u
import traceback

####################参数说明##############################
TOPKET = 3  # 抽取作为唯一某类标示符的词个数(建议设置3-4)
COLUMN = 2  # 要聚类的内容所在列
#########################################################

"""
读取原始文件,抽取每段话的关键词,将关键词排序后最后这段话的key
将相同key的段落判断为一个cluster
将结果按照每个cluster的大小排序,大的在前面
性能:
行数----1000----10000----100000----1000000--
耗时-----2s------11s------129s------1432s---
内存----0.3mb----3mb------33mb------400mb---
"""
__author__ = "liangzhicheng"

SOURCENAME, SOURCEPATH = u.getFirstFile('csv') # 读取csv文件
cluster = {}
result_file_body = []
pattern = re.compile("\w|[/.,/#@$%^& ]") # 设置文本过滤规则
count_file_dict = {}

if __name__ == '__main__':

    try:
        source_file_head = u.create_file_head(SOURCEPATH, 'left', ['类型'])
        source_file_body = u.create_file_body(SOURCEPATH)
        print u.utf8_2_gbk('开始执行聚类')
        for num, line in enumerate(source_file_body):
            content = re.sub(pattern, '', u.create_content(line, COLUMN))
            if len(content) <= 20:
                keywords = jieba.analyse.extract_tags(content, topK=2)
            else:
                keywords = jieba.analyse.extract_tags(content, topK=TOPKET)
            keywords.sort()
            key = ','.join(keywords)
            cluster[key] = str(cluster.get(key, 0)) + "," + str(num + 1)
        print u.utf8_2_gbk('聚类完成,生成输出文件')
        for num, value in enumerate(cluster.itervalues()):
            cluster_list = value[2:].split(',')
            count_file_dict[num] = len(cluster_list)
            for n in cluster_list:
                result_file_body.append(str(num) + ',' + source_file_body[int(n) - 1])
        u.create_result_file(u.changeFileName(SOURCENAME, '-聚类.csv'), source_file_head, result_file_body)
        u.writeDictFile(u.changeFileName(SOURCENAME, '-聚类统计.txt'), count_file_dict, 1)
    except:
        traceback.print_exc()
        print '=============================================================='
        print u.utf8_2_gbk('运行出错')
        print u.utf8_2_gbk('常见错误')
        print u.utf8_2_gbk('IndexError: list index out of range')
        print u.utf8_2_gbk('匹配列选择错误或source文件夹为空或label文件夹为空')
        print '=============================================================='
        raw_input('Press Enter to exit...')
  • util.py(工具类)
# coding=utf-8
import os
import sys
import re
import linecache
import random
import time
from functools import wraps


def utf8_2_gbk(str):
    '''
    utf-8转gbk
    :param str: 字符串
    :return: 转码后的字符串
    '''
    result = str.decode("utf-8").encode("gbk", "ignore")
    return result


def gbk_2_utf8(str):
    '''
    gbk转utf-8
    :param str: 字符串
    :return: 转码后的字符串
    '''
    result = str.decode("gbk").encode("utf-8", "ignore")
    return result


def create_and_list(word):
    '''
    创建and关系列表
    :param word:要拆分的内容
    :return: 拆分后的列表
    '''
    split_word = word.strip().split("&")
    return split_word


def create_or_list(word):
    '''
    创建and关系列表
    :param content:要拆分的内容
    :return: 拆分后的列表
    '''
    split_word = word.strip().split("|")
    return split_word


def create_content(line, row_num):
    '''
    以逗号分隔内容,返回指定列
    :param line: 行数
    :param row_num: 指定列
    :return:某行指定列内容
    '''
    split_line = line.strip().split(",")[row_num - 1]
    return split_line


def fetch_n_rows(source_file_name, result_file_name, rows):
    '''
    拆分前n行数据
    :param source_file_name: 数据源
    :param result_file_name: 拆分后结果
    :param rows: 要拆分的行数
    :return:拆分后的文件
    '''
    result_file = file(result_file_name, "w+")
    source_file_head = create_file_head(source_file_name)
    result_file_body = linecache.getlines(source_file_name)[1:rows]
    result_file.writelines(source_file_head)
    result_file.writelines(result_file_body)
    result_file.close()


def print_any_list(any_list):
    '''
    向控制台循环输出列表中的内容
    :param any_list:
    :return:
    '''
    i = 0
    for (num, value) in enumerate(any_list):
        i = i + 1
        print "row is:", num + 1, "\tthe value is:", value.strip()
    print "total row is:", i


def create_file_head(file_name, *list):
    '''
    获取文件标题
    :param file_name:文件名
    :return: 文件标题(字符串)
    '''
    file_head = linecache.getline(utf8_2_gbk(file_name), 1).strip()
    if len(list) != 0:
        if list[0] == 'left':
            file_head = ",".join(map(utf8_2_gbk, list[1])) + "," + file_head
        if list[0] == 'right':
            file_head = file_head + "," + ",".join(map(utf8_2_gbk, list[1]))
    file_head = file_head + "\n"
    return file_head


def create_file_body(file_name):
    '''
    获取文件主体内容
    :param file_name:文件名
    :return: 文件主体(列表)
    '''
    file_body = linecache.getlines(utf8_2_gbk(file_name))[1:]
    return file_body


def create_random_file(source_file_name, result_file_name, row):
    '''
    产生一个随机行数的文件(不计算文件标题行)
    :param source_file_name:源文件
    :param result_file_name: 目标文件
    :param row: 随机行数
    :return:
    '''
    result_file_body = []
    result_file = open(result_file_name, "w+")
    result_file_head = create_file_head(source_file_name)
    result_file.writelines(result_file_head)
    source_file_body = create_file_body(source_file_name)
    try:
        random_row_list = random.sample(range(1, len(source_file_body)), row)
        for random_row in random_row_list:
            result_file_body.append(linecache.getline(source_file_name, random_row))
        result_file.writelines(result_file_body)
    except Exception, e:
        if type(e) == ValueError:
            print c.ROW_VALUE_ERROR
        else:
            print Exception, e
    finally:
        result_file.close()


def modify_file_column(dispose_list, function, dispose_column):
    '''
    对某列文本数据进行处理
    :param function: 处理列的函数
    :param dispose_list: 待处理列表
    :param dispose_column: 待处理列
    :return: 处理后的列表
    '''
    modify_file = []
    for dispose_line in dispose_list:
        content = dispose_line.strip().split(",")
        total_column = len(content)
        left = ",".join(content[0:dispose_column - 1]) + ","
        center = "," + function(content[dispose_column]) + ","
        right = ",".join(content[dispose_column + 1:total_column]) + "\n"
        modify_file.append(left + center + right)
    return modify_file


def create_result_file(result_file_name, result_file_head, result_file_body):
    '''
    生成目标文件
    :param result_file_name: 目标文件名称
    :param result_file_head: 目标文件标题
    :param result_file_body: 目标文件主体
    :return:
    '''
    result_file = file(utf8_2_gbk(result_file_name), "w+")
    result_file.writelines(result_file_head)
    result_file.writelines(result_file_body)
    result_file.close()


def list_2_set(list):
    '''
    列白哦列表转集合
    :param list:列表
    :return:集合
    '''
    list_set = set()
    for line in list:
        list_set.add(line.strip())
    return list_set


def fn_timer(function):
    '''
    计算程序运行时间
    :param function:
    :return:
    '''

    @wraps(function)
    def function_timer(*args, **kwargs):
        t0 = time.clock()
        result = function(*args, **kwargs)
        t1 = time.clock()
        print ("Total time running %s: %s s" % (function.func_name, str(t1 - t0)))
        return result

    return function_timer


def print_any_dict(dict):
    '''
    打印字典中的内容
    :param dict: 字典
    :return:
    '''
    for key, value in dict.items():
        print key, value


def remove_blank_line(file_name):
    '''
    移除文件中的空行
    :param file_name:
    :return:
    '''
    new_word_list = []
    word_list = linecache.getlines(utf8_2_gbk(file_name))
    for line in word_list:
        if line[:-1].strip():
            new_word_list.append(line)
    return new_word_list


def create_match_words(file_name):
    '''
    创建匹配词,过滤词文本
    :param file_name: 文件名称
    :return: 文件列表[中文,英文]
    '''
    words = []
    try:
        words = map(utf8_2_gbk, remove_blank_line(file_name))
        words = list(set(words))
        words = build_word_cup(words)
    except Exception, e:
        words = remove_blank_line(file_name)
        words = list(set(words))
        words = build_word_cup(words)
    finally:
        return words


def build_word_cup(word_list):
    '''
    将原列表中的中英文分开
    :param word_list: [中英文]
    :return: [中文,英文]
    '''
    words = []
    chinese = []
    english = []
    p = re.compile(r'^[A-z].*[\w]$')
    for line in word_list:
        if p.match(line):
            english.append(line)
        else:
            chinese.append(line)
    words.append(chinese)
    words.append(english)
    return words


def build_pattern(chinese_list, english_list):
    '''
    构造匹配关键词正则表达式
    :param filter_words:chinese_list,english_list
    :param type: chinese,english
    :return:pattern
    '''

    def build_chinese_pattrns(line):
        str = line.strip().split(' ')
        line = '.*' + line.strip().replace(' ', '.*') + '.*'
        if len(str) == 2:
            line = line + '|' + '.*' + str[1] + '.*' + str[0] + '.*'
        return line

    def build_english_pattrns(line):
        line = '.*' + line.strip() + '.*'
        return line

    e_pattrns = '|'.join(map(build_english_pattrns, english_list))
    c_pattrns = '|'.join(map(build_chinese_pattrns, chinese_list))

    c_len = len(c_pattrns)
    e_len = len(e_pattrns)

    if c_len != 0 and e_len != 0:
        pattrns = c_pattrns + '|' + e_pattrns
    if c_len != 0 and e_len == 0:
        pattrns = c_pattrns
    if c_len == 0 and e_len != 0:
        pattrns = e_pattrns

    print pattrns
    pattern = re.compile(r'(' + pattrns + ')')

    return pattern


def print_len(list):
    '''
    打印列表长度
    :param list:
    :return:
    '''
    print len(list)


def print_type(any):
    '''
    打印类型
    :param any:
    :return:
    '''
    print type(any)


def build_match_label(list):
    '''
    构造匹配词列表
    :param list:
    :return:
    '''
    keywords = {}
    if len(list[0]) != 0:
        for line in list[0]:
            var = line.strip().split('\t')
            keywords[var[1]] = str(keywords.get(var[1], 0)) + "|" + '.*' + var[0] + '.*'
    if len(list[1]) != 0:
        for line in list[1]:
            var = line.strip().split('\t')
            keywords[var[1]] = str(keywords.get(var[1], 0)) + "|" + '.*' + var[0] + '.*'
    for key, value in keywords.items():
        keywords[key] = value[2:]
    return keywords


def GetFileList(dir, fileList):
    '''
    获取指定目录的所有文件
    :param dir:
    :param fileList:
    :return:
    '''
    newDir = dir
    if os.path.isfile(dir):
        fileList.append(dir.decode('gbk'))
    elif os.path.isdir(dir):
        for s in os.listdir(dir):
            newDir = os.path.join(dir, s)
            GetFileList(newDir, fileList)
    return fileList


def writeDictFile(fileName, fileDict, keyOrVlaue):
    '''
    将字典按值排序输出到文件
    :param fileName:
    :param fileDict:
    :return:
    '''
    f = file(utf8_2_gbk(fileName), 'w+')
    s = fileName.split('.')[1]
    f.write('type' + '\t' + 'count' + '\n')
    separator = '\t'
    if s == 'csv':
        separator = ','
    for key, value in sorted(fileDict.items(), key=lambda x: x[keyOrVlaue], reverse=True):
        f.write(str(key) + separator + str(value) + '\n')
    f.close()


def changeFileName(fileName, nickName):
    '''
    改变文件名称
    :param fileName:
    :param nickName:
    :return:
    '''
    f = fileName.split('.')
    fileName = f[0]
    return fileName + nickName


def sortedDict(fileDict, keyOrValue):
    '''
    将字典排序
    :param fileDict:
    :param keyOrValue:
    :return:
    '''
    newDict = {}
    for key, value in sorted(fileDict.items(), key=lambda x: x[keyOrValue], reverse=False):
        newDict[key] = value
    return newDict


def combineList(a, b):
    '''
    合并两个列表
    :param a:
    :param b:
    :return:
    '''

    def max(a, b):
        if len(a) >= len(b):
            return len(a)
        else:
            return len(b)

    def buqi(a, b):
        num = abs(len(a) - len(b))
        if len(a) > len(b):
            for i in range(num):
                b.append(',')
        else:
            for i in range(num):
                a.append(',')

    c = []
    for i in range(max(a, b)):
        buqi(a, b)
        c.append(a[i] + ',' + b[i] + '\n')
    return c


def create_str_head(arr):
    '''
    创建文件标题
    :param arr:
    :return:
    '''
    head = ','.join(map(utf8_2_gbk, arr)) + '\n'
    return head


def printFileRows(fileName):
    '''
    输出文件行数
    :param fileName:
    :return:
    '''
    f = open(utf8_2_gbk(fileName), 'rb')
    i = 0
    for line in f:
        i += 1
    print i


def getFileDir(path):
    '''
    返回标签词路径
    :param path:
    :return:
    '''
    labelList = []
    labelList = GetFileList(utf8_2_gbk(path), [])
    return labelList


def GetFileNameAndExt(path):
    '''
    获取文件名及后缀名
    :param filename:
    :return:
    '''
    (filepath, tempfilename) = os.path.split(path);
    (shotname, extension) = os.path.splitext(tempfilename);
    return shotname, extension


def printDictLen(dict):
    '''
    输出字典中键值对的个数
    :param dict:
    :return:
    '''
    i = 0
    for key, value in dict.items():
        i = i + 1
    return str(i)


def setFileName(fileName, nickName):
    '''
    改变输出名称
    :param fileName:
    :param nickName:
    :param fileType:
    :return:
    '''
    f = fileName.split('.')
    fileName = f[0] + '-' + nickName.split('.')[0] + '.' + f[1]
    return fileName


def createContent(fileName, rows):
    '''
    获取内容列表
    :param fileName:
    :param rows:
    :return:
    '''
    result = []
    count = 0
    f = open(utf8_2_gbk(fileName), 'rb')
    f.next()
    for line in f:
        count += 1
        result.append(create_content(line, rows).lower() + ',' + '\n')
    f.close()
    return [result, count]


def createContent(fileName, rows):
    '''
    获取内容列表
    :param fileName:
    :param rows:
    :return:
    '''
    result = []
    count = 0
    f = open(utf8_2_gbk(fileName), 'rb')
    f.next()
    for line in f:
        count += 1
        result.append(create_content(line, rows).lower() + ',' + '\n')
    f.close()
    return [result, count]


def GetFileWithType(path, type):
    '''
    获取当前路径下指定后缀的文件
    :param dir:
    :param type:
    :return:
    '''
    fileList = []
    if os.path.isdir(path):
        for s in os.listdir(path):
            if s.split('.')[1] == type and s not in utf8_2_gbk('打标签') and s not in utf8_2_gbk('统计'):
                fileList.append(gbk_2_utf8(s))
    return fileList


def printList(contentList):
    '''
    输出列表信息
    :param contentList:
    :return:
    '''
    for line in contentList:
        print line


def getFirstFile(type):
    '''
    获取第一个文件
    :param type:
    :return:
    '''
    filePath = ''
    fileName = ''
    sbasePath = sys.path[0] + '/source'
    lbasePath = sys.path[0] + '/label'
    if type == 'csv':
        fileName = GetFileWithType(sbasePath, type)[0]
        filePath = gbk_2_utf8(sbasePath) + '/' + fileName
    if type == 'txt':
        fileName = GetFileWithType(lbasePath, type)[0]
        filePath = gbk_2_utf8(lbasePath) + '/' + fileName
    return [fileName, filePath]

注:确保安装jieba,安装命令:pip install jieba

二、目录结构

image

  • 聚类文本放在source文件夹内

image

  • 输入python keyword_cluster.py 执行

四、csv文件内容

发表日期    内容  文章链接
2016/8/11 10:22 [心]先马//@馬天宇的水仙iPhone:[心] //@安静的水煮蛋儿:[可爱]//@进击稳稳的幸福:我哥终于有房了,娶媳妇更近一步? //@小透明bonnie:活得自在随心[心]#马天宇#//@素染言不寐:这是我深爱的马天宇 //@阿闹蛀牙啦:这是我爱的马天宇。    http://weibo.com/2604538580/E329o5lYL
2016/8/11 10:20 #我的心情#很负责任的医生[心]‘’目前已经控制住,继续吃药巩固恢复!‘’想到漫长之路要结束,心情无比好![笑哈哈][笑哈哈][笑哈哈]现在每每发现可以吃点什么东西的时候,幸福感即刻上升[鲜花][鲜花][鲜花]没有什么比健康来的更重要!  http://weibo.com/2238321464/E328I5xoj
2016/8/11 10:24 //@是凯源啊://@全世界最好的哥哥弟弟-://@贩卖甜味仙丹://@蓝绿瓶叻凯之源://@青峦怪水://@微凉会陪凯源长大: //@KarRoy他和他:老公啊 //@老王和小王的幸福生活:要! //@凯源天天在过情人节叻://@元気岛民:我也要啊啊//@生命茧:我我我    http://weibo.com/5162106244/E32afejiM
2016/8/11 10:02 你走了,我哭了,梦灭了,心碎了,缘尽了,魂没了。你走出了我的梦乡,已经不再回来,我只能把爱你的心藏在心底。你是我一生最爱的人,我还是想最后叫一声心爱的,能不能好好爱我最后一次,让我做一回最幸福的女人。不想你也难,想你又痛苦,你在人间,我在苦海。 http://t.cn/R2dy600  http://weibo.com/5783368000/E321cnCO7
2016/8/11 10:00 #鹿晗#//@Molly_希:#鹿晗# #鹿晗择天记# 一遍一遍撸,爱您十分幸福[悲伤]//@鹿晗吧_LuhanBar:#鹿晗##鹿晗择天记#素衣啡色是君子,锦裳若云望晗光,清目秀骨掌仁义,苍穹天命颉不凡。期待@M鹿M 逆天改命,造天地传说。期待#电视剧择天记# 恢弘写意。   http://weibo.com/5192296049/E320guxDd
2016/8/11 12:11 【喜欢高调恋爱的星女】第一名:天秤座,对于恋爱一向是高调的,毫不吝啬地用美丽宣言着幸福;第二名:狮子座,宣布个人所有权;第三名:水瓶座,对恋爱的态度是有一些张扬;第四名:巨蟹座,多半是因为没有安全感;第五名:双子座,喜形于色的她们,恋爱起来甜蜜表现在脸上。    http://weibo.com/5102082562/E32RKriOk
2016/8/11 12:12 嗑//@等凯源合唱的豆子:磕//@王俊凯的大长腿:嗑 //@铑孟纸:嗑 //@曦陌染:跟风嗑[可爱]//@苏晴安_重庆话专业八级:磕//@KKKKWonism_:嗑了 //@凯源会长大的幸福:我磕 //@凯源之间从来不是单箭头:不就是15年7月嘛 谁怕谁 来来来 嗑不嗑 http://weibo.com/3640241823/E32SdpLKs
2016/8/11 12:27 #七夕恋爱宣言纪#可以没有大房子,没有小轿车,没有钻戒鲜花,没有存款,只要能够和你在一起,任何其他的物质东西都可以没有,只要能和你在一起平平淡淡的过日子就很幸福~我只要你那颗爱着我的真心,我想和你一起牵手走过这一生永远不分离![心]    http://weibo.com/5110326278/E32Y3a40U
2016/8/11 12:32 #淘宝直播#  下午两点半神秘小伙伴惊喜来直播,新品预览齐看~   复制这条信息,打开[表情]手机淘宝[表情]即可看到【败家主播天天有,边看直播边剁手!幸福杂货铺zakka在淘宝直播。憋说话,快上车!】¥AAHqQWHJ¥http://t.cn/Rt0r9ed  http://weibo.com/1810051982/E330k6kOY
2016/8/11 12:10 回复@双子雨林闯天涯 对博文【棋 友(小小说)】的评论:"人到天堂,钱在银行。还是善待自己吧!不要做守财奴,好好珍惜身体,健康才是最重要的。感谢好友关注!祝健康幸福快乐![可爱]"查看原文:http://t.cn/Rt0jCqu  http://weibo.com/1697307825/E32RkqrsB
2016/8/11 12:08 它给了中国人稳稳的幸福,也给了对手末日的残酷…… 在北京时间8月9日的乒乓球四分之一决赛中:  马龙4-0战胜阿鲁纳;  丁宁4-0战胜韩莹;  李晓霞4-0战胜郑怡;  唯独张继科在比赛中略有意外。 http://t.cn/Rt03pX1    http://weibo.com/3011257507/E32QikNxF
2016/8/11 10:31 #Happy818GDay# 软糯糯的声音+醉醺醺的撒娇 我大概已经死亡了QwQ //@88颗甜豆:#Happy818GDay# 我也想哥哥把手搭在我肩上[泪]天呐这会幸福的死掉吧 //@迷上权leader的笑:#Happy818GDay# 想跟你约酒[可怜][可怜]一喝酒就变得可爱爆棚    http://weibo.com/2582954777/E32cYwSRI
2016/8/11 10:41 //@是凯源啊://@全世界最好的哥哥弟弟-://@贩卖甜味仙丹://@蓝绿瓶叻凯之源://@青峦怪水://@微凉会陪凯源长大: //@KarRoy他和他:老公啊 //@老王和小王的幸福生活:要! //@凯源天天在过情人节叻://@元気岛民:我也要啊啊//@生命茧:我我我    http://weibo.com/2548253581/E32h5xGRA
2016/8/11 15:20 #刘诗诗删代言微博#其实事情的原委是什么?我们要把自己的幸福晒出来才是最好的,你们说是不是的呢?[抱抱]    http://weibo.com/1821367405/E346bg0rg
2016/8/11 14:53 #亲爱的公主病#凡世的喧嚣和明亮,世俗的快乐和幸福,我这么可爱 干嘛要关我啊如同清亮的溪涧。  http://weibo.com/5540609286/E33Vgj06K
2016/8/11 15:26 #童瑶0811生日快乐#[微公益爱心]今天是属于你的日子,你要幸福。好喜欢,这个装逼的宣传片也出来了,总是可以先来的啊 http://weibo.com/1707660081/E348IsJV5
2016/8/11 14:26 #童瑶0811生日快乐#你真的是完美大气,喜欢。祝你生日快乐,幸幸福福的过好每一天。  http://weibo.com/1955506904/E33KzvrQx
2016/8/11 14:39 #童瑶0811生日快乐#感觉我真的非常幸福呀![笑哈哈]祝童瑶生日快乐,今后都要开开心心的。  http://weibo.com/2133712183/E33PNplT7
2016/8/11 14:50 #亲爱的公主病#凡世的喧嚣和明亮,世俗的快乐和幸福,[书呆子][书呆子][书呆子][书呆子][书呆子]如同清亮的溪涧。 http://weibo.com/2859743892/E33UklCns
2016/8/11 14:42 【有过5个就很幸福了,你有几条?】-有爸妈疼你。被人背过。得过第1名。笑到肚子痛。有人为你哭过。买到喜欢的衣服。半夜有人短信给你。和蜜友煲电话粥。生病有过人照顾你。生日凌晨有人发短信祝福。在车站有过人接。和心爱的一起走路到腿疼。有好事就有人首先想到你。其实,幸福可以很简单。   http://weibo.com/2100446984/E33QPwmrn
2016/8/11 15:15 .在每一个人的生活中,苦与乐的数量取决于他的遭遇,苦与乐的品质取决于他的灵魂。欢乐与欢乐不同,痛苦与痛苦不同,其间的区别远远超过欢乐与痛苦的不同。内心世界的丰富、敏感和活跃与否决定了一个人感受幸福的能力。在此意义上,幸福是一种能力。    http://weibo.com/2033340450/E344s1gKM
2016/8/11 15:12 十大腐向动漫#异国色恋浪漫谭##世界第一初恋[电影]##纯情罗曼史##和爸爸KISS[电影]##没有钱##没有钱资源##幸福花园##恋爱暴君##钢索危情#1、异国色调浪漫谭2、世界第一初恋3、纯情罗曼史4、和爸爸kiss5、漂亮爸爸6、学生会长的忠告7、幸福花园8、没有钱9、恋爱暴君资源点赞?私信来拿[爱你] http://weibo.com/2025310793/E342UgHzF
2016/8/11 15:13 dei//@如诩: 我自己过得健康快乐富有是第一位的 //@宇宙银时红豆饭://@也要楚天阔:我没有家庭,活得很幸福。如果还缺点什么,那就是钱。有钱了更幸福。//@豆瓣冷血才女:太对!社会一直在给姑娘们灌输没人爱有多么糟糕可怕,但真相是,没人爱很正常,没什么可怕,受制于人才是要命的大问题。   http://weibo.com/1763705721/E343FfMUJ
2016/8/11 15:06 喜欢的事自然可以坚持,不喜欢的怎么也长久不了。永远不要去羡慕别人的生活,即使那个人看起来快乐富足。永远不要去评价别人是否幸福,即使那个人看起来孤独无助。幸福如人饮水,冷暖自知。世界再精彩,他人再美好,都与你无甚关系,你就是你,只须梳理自己的羽毛,飞你想去的地方。 http://weibo.com/3288949503/E340LhayF
2016/8/11 14:55 晒幸福的爸妈啦~老爸老妈的爱情就像歌词里唱得那样:陪伴是最美的告白,这不就是最美好的爱情吗?多少次,不相信爱情的时候就会想到爸妈的幸福,便又充满信心重新上路??(图一图四,我的眼里只有你[心][心]) http://t.cn/RtOZZAB    http://weibo.com/3927462746/E33We1aH2
2016/8/11 14:32 #和你在一起# http://t.cn/Rt9EmAU 经历各种悲欢离合,才走到幸福的这一步,实在不易,这张照片也是摄影师拍完外景照的最后一张,原本拍完回去的,摄影师一回头看我俩挺甜蜜的就把这瞬间给定格了下来,留下了最美最自然的回忆。希望一直相守幸福到老。    http://weibo.com/2579203107/E33MEC21d
2016/8/11 15:05 789号:@汪楚雅 其人面相看来个性十分突出,事业工作上面的运势都会很不错的,一帆风顺,一直都保持着自己比自己强的男人,喜欢有上进心的男人,头脑很聪明,做事周到,但是在婚姻运势上不是很好,婚后生活不是很幸福美满,冲突会比较多,不会有个好的幸福生活,多注意,财运一般,晚年运势不佳。    http://weibo.com/5071362637/E3405klmJ
2016/8/11 14:55 #懂,让彼此更近# 你说你想要稳稳的幸福,但通往幸福的路上,你得先拥有稳稳的安全。2016款英朗,配备CBC弯道制动控制系统 ,在转弯制动时,系统将分别控制每个车轮的制动力,减少转向过度或不足的危险,实现最优制动力分配,从而确保汽车在转弯制动时的稳定性。 http://weibo.com/5631641335/E33Wlni5Q
2016/8/11 15:07 我我我...我有种不祥的预感[doge][doge][doge]说好的幸福呢//@我会飞你不行MS:接受拒绝随便你,看你觉得哪个比较幸福,如果抽到你我已经想好怎么表白了[喵喵][喵喵][喵喵]//@诗诗诗诗诗诗小Q:你表白呀[doge]可以拒收么[doge]你怎么可能有表白这个技能[doge][doge][doge] http://weibo.com/2737660833/E340X5pWX
2016/8/11 15:35 【哲理句子】1、钱能买到的东西,最后都不值钱。 2、肯低头的人,永远不会撞到矮门。 3、出路出路,就是走出去才会有路! 4、幸福,是用来感觉的,而不是用来比较的。 5、创造机会的是能人,等待机会的是常人,放弃机会的是蠢人。 6、我们都是远视眼,往往模糊了离我们最近的幸福。    http://weibo.com/3435672034/E34chbhhI
2016/8/11 15:12 韩国直邮美瞳 Eye-young爱漾正品美瞳 购买请联系客服QQ:3091582003 微信:SVIP40088 诚招代理 100款美瞳隐形眼镜.全网最低价.诚招全国大中小批发商.代理商                                不是恋爱的感觉让我幸福而是爱上你的感觉让我幸福。   http://weibo.com/2380051891/E34314daX
2016/8/11 14:49 亲爱的双鱼,该醒醒了。你已经做了太多无谓的挣扎,太多荒唐的事情,太多盲目的决定,而错过了太多本来的幸福,太多安静的生活,太多理性的选择。从现在开始,请认真把痛苦的过往都忘记,再用心把你错过的都弥补回来。你要更精彩的活,精彩的让别人注视和羡慕,而不只是关注别人的幸福!   http://weibo.com/3903865171/E33TEs0X9
2016/8/11 15:18 幸福狐狸在别人眼里是一个文胸,其实我们是爱的传播,现在中国女性乳腺癌占世界最高,每10秒就能发现一个乳腺癌,百分之八十是因为穿戴一些不正确的文胸所导致。就是因为我们中国没有内衣文化,穿戴了一些不健康的文胸,那么我们幸福狐狸所有的代理们要把健康的文胸推广给我们的女同胞们! http://weibo.com/5408179112/E345wtZqU
2016/8/11 15:28 人生路漫漫,你是幸福源,感谢有你,一路上的鼓励和支持;感谢有你,一路上的欢声和笑语;感谢有你,一路上的安慰和宠爱。天,因你而晴;月,因你而圆;生命,因你而精彩;我,因你而幸福![爱你]@会游泳的小于 @金龙鱼   http://t.cn/RtphF2F  http://weibo.com/1310747102/E349u2Vi4
2016/8/11 15:30 #亲爱的公主病#我们要把自己的幸福晒出来才是最好的,你们说是不是的呢?[抱抱]现在看到了吗,这个知书达理的不都是来了吗[moc转发]  http://weibo.com/1706634324/E34ayeyUA
2016/8/11 15:16 恭喜恭喜!话说这位演员还是很有印象的,TVB不少他有拍过的戏//@墨夷六明: 恭喜恭喜//@Alice_汏魔仼: //@宅腐集中营: 恭喜,要幸福噢噢[爱你] http://weibo.com/2305264201/E344C77Rz
2016/8/11 14:53 弯下腰为我系鞋带[心][心][心]心动[心][心]当然也会静静看他睡着的样子,感觉很幸福[害羞]@念瑶GFNKJ @xjj868蓝录 @小栗子936德龙    http://weibo.com/3934383248/E33VubROV
2016/8/11 15:13 虐狗夫妇[熊猫][兔子][心]#吴奇隆刘诗诗很幸福#『吴奇隆刘诗诗:浓情蜜意的发光体~-今日头条』http://t.cn/RtOwCoG    http://weibo.com/5209068381/E343s0fUl
2016/8/11 15:12 #亲爱的公主病#昨天太近,明天太远。选在今日,对你告白。对你的依赖,如同鱼儿离不开海洋,如同植物离不开阳光。给我一次机会,写满我们的幸福人生。这送祝福的都来了吗[酷] http://weibo.com/2008240200/E342Zk2sG

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券