語(yǔ)音轉(zhuǎn)寫(xiě)正確率計(jì)算

語(yǔ)音轉(zhuǎn)文字準(zhǔn)確率計(jì)算 轉(zhuǎn)寫(xiě)正確率的衡量項(xiàng):ACC瓢娜、Corr
H = 正確的字?jǐn)?shù)
D = 刪減的錯(cuò)誤儿捧,“我是中國(guó)人” “我是中國(guó)”
S = 替換的錯(cuò)誤茬故,“我是中國(guó)人” “我是中華人”
I = 插入的錯(cuò)誤虎谢,“我是中國(guó)人” “我是中國(guó)男人”
N = 總字?jǐn)?shù)
ACC = (H - I)/N
Corr= H/N

思路:
sample "我是中國(guó)人學(xué)大生,今天要測(cè)試,錄音結(jié)束"
test "中國(guó)人民生曼尊,今天有個(gè)大事情酬诀,我想吃飯"

語(yǔ)音轉(zhuǎn)寫(xiě)文字,需要遵從文字的語(yǔ)義骆撇,所以不能文字出現(xiàn)就算正確瞒御,不考慮各種復(fù)雜的因素,
要從test中找到sample中對(duì)應(yīng)的字符神郊,并且順序要按sample中的字符順序(排除標(biāo)點(diǎn)符號(hào))

如:
sample中每個(gè)字找到的順序


image.png

那么如何找到正確的文字個(gè)數(shù)呢肴裙?應(yīng)該就是在這組序號(hào)中剔除未找到的-1,然后從剩下的序號(hào)中找到最長(zhǎng)升序序列(竟然是個(gè)算法問(wèn)題涌乳,丟r吲场)


image.png

如圖,剔除-1夕晓,剩下的就是12,0,1,2,9,4,5,6,最長(zhǎng)升序那不就是0,1,2,4,5,6嗎宛乃,對(duì)應(yīng)的文字就是“中國(guó)人生今天”,那么算法如何實(shí)現(xiàn)呢?

這里給出個(gè)笨辦法:
遍歷序列征炼,將每個(gè)升序數(shù)組都保存在list里析既,如果不是升序,就新建一個(gè)list谆奥。
如當(dāng)遇到12眼坏,則新建一個(gè)list:


image.png

當(dāng)遇到0,則需要新建一個(gè)list


image.png

另外還需要注意酸些,即使是升序宰译,也不一定就能組成最長(zhǎng)
如0 1 2,后面是9擂仍,如果加進(jìn)去了囤屹,就只能組成0 1 2 9,長(zhǎng)度為4,如果放棄加9逢渔,則有機(jī)會(huì)組成0 1 2 4 5 6,長(zhǎng)度為6乡括。所以每次添加一個(gè)符合升序規(guī)則的數(shù)字的時(shí)候肃廓,我們要提前將原list備份一個(gè),留個(gè)機(jī)會(huì)看能否組成更長(zhǎng)的序列诲泌。

剩下就是計(jì)算刪減盲赊、替換、添加的文字個(gè)數(shù)了敷扫,這個(gè)比較簡(jiǎn)單哀蘑,看看代碼邏輯就行了留荔。
本文代碼沒(méi)有考慮時(shí)間復(fù)雜度和內(nèi)存占用(用于測(cè)試)鹦肿,請(qǐng)自行優(yōu)化舟肉。
上代碼:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.NavigableMap;
import java.util.Set;
import java.util.function.IntPredicate;
import java.util.logging.Logger;

/**
 * 語(yǔ)音轉(zhuǎn)文字準(zhǔn)確率計(jì)算 轉(zhuǎn)寫(xiě)正確率的衡量項(xiàng):ACC明肮、Corr H = 正確的字?jǐn)?shù) D = 刪減的錯(cuò)誤倍宾,“我是中國(guó)人”?“我是中國(guó)” S =
 * 替換的錯(cuò)誤蔬捷,“我是中國(guó)人”?“我是中華人” I = 插入的錯(cuò)誤幔翰,“我是中國(guó)人”?“我是中國(guó)男人” N = 總字?jǐn)?shù) ACC = (H - I)/N
 * Corr= H/N
 */

public class StringCompare {
    private static final String ORIGINAL_STRING = "我是中國(guó)人學(xué)大生,今天要測(cè)試,錄音結(jié)束";

    private static final String TEST_STRING = "中國(guó)人民生凭疮,今天有個(gè)大事情哮奇,我想吃飯";

    private static float mAcc = 0;
    private static float mCorr = 0;

    private static int H = 0;// 正確的字?jǐn)?shù)
    private static int N = 0;// 總字?jǐn)?shù)
    private static int D = 0;// 刪減的字?jǐn)?shù)
    private static int S = 0;// 替換的字?jǐn)?shù)
    private static int I = 0;// 插入的字?jǐn)?shù)

    private static List<Character> arrayD = new ArrayList<Character>();
    private static List<Character> arrayI = new ArrayList<Character>();
    private static List<Character> arrayS = new ArrayList<Character>();

    /**
     * 移除標(biāo)點(diǎn)符號(hào)
     */
    private static String removePunctuation(String sentence) {
        String string = sentence.replaceAll("\\pP", "");// 完全清除標(biāo)點(diǎn)
        System.out.println(string);
        return string;
    }

    private static void print() {
        mAcc = (float) (H - I) / (float) N;
        mCorr = H / (float) N;
        System.out.println("H:" + H + ", N:" + N + ", D:" + D + ", I:" + I + ", S:" + S);
        System.out.println("mAcc" + mAcc + ",mCorr:" + mCorr);
    }

    /*
     * 獲取A字符串每個(gè)字符在B字符串中的位置
     */
    private static int[] getInIndex(String original, String test) {
        char[] charOriginal = original.toCharArray();
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < charOriginal.length; i++) {
            int tempIndex = test.indexOf(charOriginal[i]);
            System.out.println("tempIndex:" + tempIndex);
            while (list.contains(tempIndex) && tempIndex != -1) {
                System.out.println("while");
                tempIndex = test.indexOf(charOriginal[i], tempIndex + 1);
                System.out.println("tempIndex:" + tempIndex);
            }
            list.add(tempIndex);
            System.out.println("charOriginal[" + i + "]:" + charOriginal[i] + ", index:" + tempIndex);
        }
        return list.stream().mapToInt(Integer::valueOf).toArray();
    }

    // 找出最長(zhǎng)的有序list
    private static Map<Integer, Integer> getMaxSortedIndexs(int[] index) {
        List<Map<Integer, Integer>> list = new ArrayList<Map<Integer, Integer>>();
        for (int i = 0; i < index.length; i++) {

            if (index[i] >= 0) {
                System.out.println("cur index:" + index[i]);
                if (list.size() == 0) {
                    list.add(new LinkedHashMap<Integer, Integer>());
                    list.get(list.size() - 1).put(i, index[i]);
                } else {
                    ListIterator<Map<Integer, Integer>> it = list.listIterator();
                    while (it.hasNext()) {
                        Map<Integer, Integer> everyList = it.next();
                        // 與最后一個(gè)元素比較
                        if (index[i] > (int) everyList.values().toArray()[everyList.size() - 1]) {
                            Map<Integer, Integer> tempList = new LinkedHashMap<Integer, Integer>();
                            tempList.putAll(everyList);
                            everyList.put(i, index[i]);
                            it.add(tempList);
                        } else {
                            Map<Integer, Integer> tempList = new LinkedHashMap<Integer, Integer>();
                            tempList.put(i, index[i]);
                            it.add(tempList);
                        }
                    }
                }
            }
        }
        System.out.println("list size:" + list.size());
        int longestIndex = 0;
        int maxlength = 0;
        for (int i = 0; i < list.size(); i++) {
            System.out.println("list[" + i + "]:" + list.get(i).toString());
            if (list.get(i).size() > maxlength) {
                maxlength = list.get(i).size();
                longestIndex = i;
            }
        }
        return list.get(longestIndex);
    }

    public static void main(String[] args) {
        long time = System.currentTimeMillis();
        // 拿到每個(gè)字符在測(cè)試字符串中的位置
        String original = removePunctuation(ORIGINAL_STRING);
        String test = removePunctuation(TEST_STRING);
        int[] index = getInIndex(original, test);
        for (int i = 0; i < index.length; i++) {
            System.out.print(index[i] + "\t");
        }
        System.out.print("\n");
        Map<Integer, Integer> sortedIndex = getMaxSortedIndexs(index);
        System.out.println("cost:" + (System.currentTimeMillis() - time));
        Set<Integer> keySet = sortedIndex.keySet();
        Collection<Integer> valueSet = sortedIndex.values();
        System.out.println("在original字符串中正確的字符");
        System.out.println("[" + ORIGINAL_STRING + "]");
        for (int key : keySet) {
            System.out.println("index:" + key + "value:" + original.charAt(key));
        }
        System.out.println("--------------------------------------------------------------");
        System.out.print("在test字符串中正確的字符\n");
        System.out.println("[" + TEST_STRING + "]");
        for (int key : valueSet) {
            System.out.println("index:" + key + "value:" + test.charAt(key));
        }
        System.out.println("--------------------------------------------------------------");
        System.out.print("計(jì)算準(zhǔn)確率\n");

        // 每一段的差值都需要計(jì)算
        int tempkey = 0;
        int tempValue = 0;
        // 保存每一段的A字符序號(hào)的差
        int diffKey = 0;
        // 保存每一段的B字符序號(hào)的差
        int diffValue = 0;
        int indexFlag == 0;
        for (Integer key : sortedIndex.keySet()) {
            int value = sortedIndex.get(key);
            if (tempkey == 0 && key != 0 && indexFlag == 0) {
                diffKey = key - tempkey;
            } else if (key == 0) {
                diffKey = 0;
            } else {
                diffKey = key - tempkey - 1;
            }
            if (tempValue == 0 && value != 0 && indexFlag  == 0) {
                diffValue = value - tempValue;
            } else if (value == 0) {
                diffValue = 0;
            } else {
                diffValue = value - tempValue - 1;
            }
            System.err.println("diffKey:" + diffKey + ", diffValue:" + diffValue);
            if (diffKey > diffValue) {
                D += diffKey - diffValue;
                S += diffValue;
            } else if (diffKey == diffValue) {
                S += diffValue;
            } else {
                I += diffValue - diffKey;
                S += diffKey;
            }
            tempkey = key;
            tempValue = value;
            indexFlag ++;
        }
        System.out.println("tempkey:" + tempkey + ",tempValue:" + tempValue);
        diffKey = original.length() - tempkey - 1;
        diffValue = test.length() - tempValue - 1;
        System.out.println("diffKey:" + diffKey + ",diffValue:" + diffValue);
        if (diffKey > diffValue) {
            D += diffKey - diffValue;
            S += diffValue;
        } else if (diffKey == diffValue) {
            S += diffValue;
        } else {
            I += diffValue - diffKey;
            S += diffKey;
        }
        H = sortedIndex.size();
        N = test.length();
        print();
        System.out.println("--------------------------------------------------------------");
    }
}

C#版本

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Linq;

namespace Calibration.utils
{
    class EsrUtils
    {
        private EsrUtils() { }

        /*private static readonly EsrUtils singleInstance = new EsrUtils();

        public static EsrUtils GetInstance
        {
            get
            {
                return singleInstance;
            }
        }*/

        //移除標(biāo)點(diǎn)符號(hào)
        public static string RemovePunctuation(string sentence)
        {
            return Regex.Replace(sentence, "[ \\[ \\] \\^ \\-_*×――(^)$%~!@#$…&%¥—+=<>《》!膛腐!???::?`·鼎俘、哲身。,贸伐;,.;\"‘’“”-]", "");
        }


        // 獲取A字符串每個(gè)字符在B字符串中的位置
        public static int[] GetInIndex(String original, String test)
        {
            char[] charOriginal = original.ToCharArray();
            var list = new List<int>();
            for (int i = 0; i < charOriginal.Length; i++)
            {
                int tempIndex = test.IndexOf(charOriginal[i]);
                Console.WriteLine("tempIndex:" + tempIndex);
                while (list.Contains(tempIndex) && tempIndex != -1)
                {
                    Console.WriteLine("while");
                    tempIndex = test.IndexOf(charOriginal[i], tempIndex + 1);
                    Console.WriteLine("tempIndex:" + tempIndex);
                }
                list.Add(tempIndex);
                Console.WriteLine("charOriginal[" + i + "]:" + charOriginal[i] + ", index:" + tempIndex);
            }
            return list.ToArray();
        }

        // 找出序號(hào)數(shù)組中最長(zhǎng)的升序子序列
        // 目的
        public static Dictionary<int, int> GetMaxSortedIndexs(int[] index)
        {
            List<Dictionary<int, int>> list = new List<Dictionary<int, int>> { };
            for (int i = 0; i < index.Length; i++)
            {

                if (index[i] >= 0)
                {
                    Console.WriteLine("cur index:" + index[i]);
                    if (list.Count == 0)
                    {
                        list.Add(new Dictionary<int, int>());
                        list.Last().Add(i, index[i]);
                    }
                    else
                    {
                        List<Dictionary<int, int>> listBackup = new List<Dictionary<int, int>> { };
                        for (int j = 0; j < list.Count; j++)
                        {
                            Dictionary<int, int> everyList = list[j];
                            // 與最后一個(gè)元素比較
                            if (index[i] > everyList.Values.Last())
                            {
                                // 將當(dāng)前Dictionary備份一個(gè)勘天,因?yàn)楫?dāng)前的數(shù)據(jù)添加或者不添加會(huì)有兩種結(jié)果
                                // 如數(shù)組 12 0 1 2 9 4 5 6
                                // 如果 0 1 2 后加了9,那只有 0 1 2 9長(zhǎng)度為4
                                // 如果 0 1 2 不加9,那就有0 1 2 4 5 6,長(zhǎng)度為6
                                Dictionary<int, int> tempList = new Dictionary<int, int>(everyList);
                                listBackup.Add(tempList);
                                everyList.Add(i, index[i]);
                            }
                            else
                            {
                                Dictionary<int, int> tempList = new Dictionary<int, int>();
                                tempList.Add(i, index[i]);
                                listBackup.Add(tempList);
                            }
                        }
                        // list 合并
                        list = list.Union(listBackup).ToList<Dictionary<int, int>>();
                    }
                }
            }
            Console.WriteLine("list size:" + list.Count);
            int longestIndex = 0;
            int maxlength = 0;
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine("list[" + i + "]:" + list[i]);
                if (list[i].Count > maxlength)
                {
                    maxlength = list[i].Count;
                    longestIndex = i;
                }
            }
            return list[longestIndex];
        }

        public static List<float[]> GetParameters(string originalString, List<string> testString)
        {
            List<float[]> resultList = new List<float[]> { };
            try
            {
                string original = RemovePunctuation(originalString);
                for (int i = 0; i < testString.Count; i++)
                {
                    string test = testString[i];
                    test = RemovePunctuation(test);
                    int[] index = EsrUtils.GetInIndex(original, test);
                    Console.WriteLine("index:" + index);
                    Dictionary<int, int> dic = EsrUtils.GetMaxSortedIndexs(index);
                    int H = 0;
                    int N = 0;
                    int I = 0;
                    int S = 0;
                    int D = 0;
                    float corr = 0;
                    float acc = 0;
                    Dictionary<int, int> sortedIndex = GetMaxSortedIndexs(index);
                    Console.WriteLine("在original字符串中正確的字符");
                    Console.WriteLine("[" + originalString + "]");
                    foreach (int key in dic.Keys)
                    {
                        Console.WriteLine("index:" + key + "value:" + original.ToCharArray()[key]);
                    }
                    Console.WriteLine("--------------------------------------------------------------");
                    Console.WriteLine("在test字符串中正確的字符\n");
                    Console.WriteLine("[" + testString[i] + "]");
                    foreach (int key in dic.Values)
                    {
                        Console.WriteLine("index:" + key + "value:" + test.ToCharArray()[key]);
                    }
                    Console.WriteLine("--------------------------------------------------------------");
                    Console.WriteLine("計(jì)算準(zhǔn)確率\n");

                    // 每一段的差值都需要計(jì)算
                    /*
                    int tempkey = 0;
                    int tempValue = 0;
                    int diffKey = 0;
                    int diffValue = 0;
                    foreach (int key in sortedIndex.Keys)
                    {
                        int value = sortedIndex[key];
                        diffKey = key - tempkey;
                        diffValue = value - tempValue;
                        if (diffKey > diffValue)
                        {
                            D += diffKey - diffValue;
                            S += diffValue;
                        }
                        else if (diffKey == diffValue)
                        {
                            S += diffValue;
                        }
                        else
                        {
                            I += diffValue - diffKey;
                            S += diffKey;
                        }
                        tempkey = key;
                        tempValue = value;
                    }
                    Console.WriteLine("tempkey:" + tempkey + ",tempValue:" + tempValue);
                    diffKey = original.Length - tempkey;
                    diffValue = test.Length - tempValue;
                    if (diffKey > diffValue)
                    {
                        D += diffKey - diffValue;
                        S += diffValue;
                    }
                    else if (diffKey == diffValue)
                    {
                        S += diffValue;
                    }
                    else
                    {
                        I += diffValue - diffKey;
                        S += diffKey;
                    }
                    H = sortedIndex.Count;
                    N = test.Length;
                    */
                    // 每一段的差值都需要計(jì)算
                    int tempkey = 0;
                    int tempValue = 0;
                    // 保存每一段的A字符序號(hào)的差
                    int diffKey = 0;
                    // 保存每一段的B字符序號(hào)的差
                    int diffValue = 0;
                    int indexFlag == 0;
                    foreach (int key in sortedIndex.Keys)
                    {
                        int value = sortedIndex[key];
                        if (tempkey == 0 && key != 0 && indexFlag  == 0) //判斷第一位元素
                        {
                            diffKey = key - tempkey;
                        }
                        else if (key == 0)
                        {
                            diffKey = 0;
                        }
                        else
                        {
                            diffKey = key - tempkey - 1;
                        }
                        if (tempValue == 0 && value != 0 && indexFlag  == 0) //判斷第一位元素
                        {
                            diffValue = value - tempValue;
                        }
                        else if (value == 0)
                        {
                            diffValue = 0;
                        }
                        else
                        {
                            diffValue = value - tempValue - 1;
                        }
                        Console.WriteLine("diffKey:" + diffKey + ", diffValue:" + diffValue);
                        if (diffKey > diffValue)
                        {
                            D += diffKey - diffValue;
                            S += diffValue;
                        }
                        else if (diffKey == diffValue)
                        {
                            S += diffValue;
                        }
                        else
                        {
                            I += diffValue - diffKey;
                            S += diffKey;
                        }
                        tempkey = key;
                        tempValue = value;
                        indexFlag ++;
                    }
                    Console.WriteLine("tempkey:" + tempkey + ",tempValue:" + tempValue);
                    diffKey = original.Length - tempkey - 1;
                    diffValue = test.Length - tempValue - 1;
                    Console.WriteLine("diffKey:" + diffKey + ",diffValue:" + diffValue);
                    if (diffKey > diffValue)
                    {
                        D += diffKey - diffValue;
                        S += diffValue;
                    }
                    else if (diffKey == diffValue)
                    {
                        S += diffValue;
                    }
                    else
                    {
                        I += diffValue - diffKey;
                        S += diffKey;
                    }
                    H = sortedIndex.Count;
                    N = test.Length;
                    float[] result = new float[7];
                    acc = (float)(H - I) / (float)N;
                    corr = H / (float)N;
                    result[0] = acc;
                    result[1] = corr;
                    result[2] = H;
                    result[3] = N;
                    result[4] = D;
                    result[5] = S;
                    result[6] = I;
                    Console.WriteLine("acc" + acc + ",corr: " + corr);
                    resultList.Add(result);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("error accur:" + e.ToString());
                return null;
            }
            return resultList;
        }

        internal static object GetInstance()
        {
            throw new NotImplementedException();
        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末误辑,一起剝皮案震驚了整個(gè)濱河市沧踏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巾钉,老刑警劉巖翘狱,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異砰苍,居然都是意外死亡潦匈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)赚导,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茬缩,“玉大人,你說(shuō)我怎么就攤上這事吼旧』宋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵圈暗,是天一觀的道長(zhǎng)掂为。 經(jīng)常有香客問(wèn)我,道長(zhǎng)员串,這世上最難降的妖魔是什么勇哗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮寸齐,結(jié)果婚禮上欲诺,老公的妹妹穿的比我還像新娘。我一直安慰自己渺鹦,他們只是感情好扰法,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著海铆,像睡著了一般迹恐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卧斟,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天殴边,我揣著相機(jī)與錄音,去河邊找鬼珍语。 笑死锤岸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的板乙。 我是一名探鬼主播是偷,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拳氢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蛋铆?” 一聲冷哼從身側(cè)響起馋评,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刺啦,沒(méi)想到半個(gè)月后留特,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玛瘸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蜕青,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糊渊。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡右核,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渺绒,到底是詐尸還是另有隱情贺喝,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布芒篷,位于F島的核電站搜变,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏针炉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一扳抽、第九天 我趴在偏房一處隱蔽的房頂上張望篡帕。 院中可真熱鬧,春花似錦贸呢、人聲如沸镰烧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怔鳖。三九已至,卻和暖如春固蛾,著一層夾襖步出監(jiān)牢的瞬間结执,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工艾凯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留献幔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓趾诗,卻偏偏與公主長(zhǎng)得像蜡感,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 用到的組件 1郑兴、通過(guò)CocoaPods安裝 2犀斋、第三方類(lèi)庫(kù)安裝 3、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶(hù)反饋 ...
    SunnyLeong閱讀 14,602評(píng)論 1 180
  • 用兩張圖告訴你情连,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料叽粹? 從這篇文章中你...
    hw1212閱讀 12,693評(píng)論 2 59
  • Java工程師成神之路數(shù)據(jù)一、基礎(chǔ)篇1.1 JVM1.1.1. Java內(nèi)存模型蒙具,Java內(nèi)存管理球榆,Java堆和棧...
    漂泊的靈魂閱讀 467評(píng)論 0 4
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn)禁筏,但是人生放棄了冒險(xiǎn)持钉,也就放棄了無(wú)數(shù)的可能。 ...
    yichen大刀閱讀 6,033評(píng)論 0 4
  • 公元:2019年11月28日19時(shí)42分農(nóng)歷:二零一九年 十一月 初三日 戌時(shí)干支:己亥乙亥己巳甲戌當(dāng)月節(jié)氣:立冬...
    石放閱讀 6,870評(píng)論 0 2