第六章(1.3)自然語言處理實戰——使用tf-idf演算法實現簡單的文字聚類

weixin_34107955發表於2019-01-13

一、原理

  • 使用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

二、目錄結構

10019820-098aabc64f42532b
image

  • 聚類文字放在source資料夾內

    10019820-ea19d65784e883e3
    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

關注我的技術公眾號,每天推送優質文章
關注我的音樂公眾號,工作之餘放鬆自己
微信掃一掃下方二維碼即可關注:


10019820-19645c98d3ee9b69.jpg
音樂公眾號

10019820-7581802d80884515.jpg
技術公眾號

相關文章