diff --git a/.autocorrectignore b/.autocorrectignore new file mode 100644 index 0000000..37dadb6 --- /dev/null +++ b/.autocorrectignore @@ -0,0 +1,3 @@ +*_test.go +_fixtures/**/*.txt +README.md \ No newline at end of file diff --git a/README.md b/README.md index c3932d6..2bc45ae 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ func main() { // => "于 3 月 10 日开始" autocorrect.Format("包装日期为2013年3月10日") - // => "包装日期为2013年3月10日" + // => "包装日期为 2013 年 3 月 10 日" autocorrect.Format("生产环境中使用Go") # => "生产环境中使用 Go" @@ -106,16 +106,16 @@ BenchmarkFormatHTML-12 1100 1097027 ns/op ### Format | Total chars | Duration | -| ----- | ------- | -| 50 | 0.06 ms | -| 100 | 0.11 ms | -| 400 | 0.42 ms | +| ----------- | -------- | +| 50 | 0.06 ms | +| 100 | 0.11 ms | +| 400 | 0.42 ms | ### FormatHTML | Total chars | Duration | -| ----- | ------- | -| 2K | 1.09 ms | +| ----------- | -------- | +| 2K | 1.09 ms | ## License diff --git a/_fixtures/example.expected.txt b/_fixtures/example.expected.txt index e72a54e..0028350 100644 --- a/_fixtures/example.expected.txt +++ b/_fixtures/example.expected.txt @@ -13,14 +13,14 @@ }
- 瑞幸咖啡创始人兼 CEO 钱治亚在瑞幸咖啡举行的供应商大会上宣布,瑞幸咖啡在 2021 年的门店数量将达到1 万家。同时,瑞幸将成为中国最大的连锁咖啡品牌,在门店与消费杯数方面超过星巴克。另外,2019年7月11日,瑞幸咖啡发布了进军新鲜现制茶饮市场的战略级产品 “小鹿茶。同时,其也在积极探索海外市场,同年 9 月 3 日,瑞幸咖啡宣布将小鹿茶作为瑞幸咖啡旗下独立品牌运营并采用新零售合伙人的模式。 + 瑞幸咖啡创始人兼 CEO 钱治亚在瑞幸咖啡举行的供应商大会上宣布,瑞幸咖啡在 2021 年的门店数量将达到1 万家。同时,瑞幸将成为中国最大的连锁咖啡品牌,在门店与消费杯数方面超过星巴克。另外,2019 年 7 月 11 日,瑞幸咖啡发布了进军新鲜现制茶饮市场的战略级产品 “小鹿茶。同时,其也在积极探索海外市场,同年 9 月 3 日,瑞幸咖啡宣布将小鹿茶作为瑞幸咖啡旗下独立品牌运营并采用新零售合伙人的模式。
title := "咖啡创始人兼CEO钱治亚"
title := "咖啡创始人兼CEO钱治亚"
-2019年7月22日,瑞幸咖啡与 Americana 集团 (中东地区最大的食品制造及销售公司) 签署了战略合作框架协议,双方计划共同设立合资公司,在大中东和印度地区开展咖啡新零售业务。此外,同年的 9 月 25 日,瑞幸咖啡还与路易达孚集团签署了战略合作协议,双方将通过共建的合资公司开发中国高品质果汁联合品牌业务。 + 2019 年 7 月 22 日,瑞幸咖啡与 Americana 集团 (中东地区最大的食品制造及销售公司) 签署了战略合作框架协议,双方计划共同设立合资公司,在大中东和印度地区开展咖啡新零售业务。此外,同年的 9 月 25 日,瑞幸咖啡还与路易达孚集团签署了战略合作协议,双方将通过共建的合资公司开发中国高品质果汁联合品牌业务。
@@ -28,5 +28,5 @@
智通财经 APP 获悉,三生制药 (01530) 获 JP Morgan 增持 270.3 万股,涉资约 2590 万港元。截至 10 时 33 分,涨 4.5%,报价 10.68 港元,成交额 6220 万。
-据港交所最新权益披露资料显示,2019年12月27日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股,总价约 2590 万港元。
- +据港交所最新权益披露资料显示,2019 年 12 月 27 日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股,总价约 2590 万港元。
+ \ No newline at end of file diff --git a/format.go b/format.go index ebb0dbe..6463838 100644 --- a/format.go +++ b/format.go @@ -12,8 +12,6 @@ const ( var ( // Strategies all rules strategies []*strategery - cjkRe = regexp.MustCompile("[" + cjk + "]") - fullDateRe = regexp.MustCompile(spaceRe + `{0,}\d+` + spaceRe + `{0,}年` + spaceRe + `{0,}\d+` + spaceRe + `{0,}月` + spaceRe + `{0,}\d+` + spaceRe + `{0,}[日号]` + spaceRe + `{0,}`) dashHansRe = regexp.MustCompile(`([` + cjk + `)】」》”’])([\-]+)([` + cjk + `(【「《“‘])`) leftQuoteRe = regexp.MustCompile(spaceRe + `([(【「《])`) rightQuoteRe = regexp.MustCompile(`([)】」》])` + spaceRe) @@ -43,18 +41,8 @@ func init() { registerStrategery(`[‘“【「《(]`, `[\w`+cjk+`]`, false, true) } -// removeFullDateSpacing -// 发布 2013 年 3 月 10 号公布 -> 发布2013年3月10号公布 -func removeFullDateSpacing(in string) (out string) { - spaceRe := regexp.MustCompile(spaceRe + "+") - // Fix fulldate - return fullDateRe.ReplaceAllStringFunc(in, func(part string) string { - return spaceRe.ReplaceAllString(part, "") - }) -} - func spaceDashWithHans(in string) (out string) { - // 自由-开放 + // 自由 - 开放 out = dashHansRe.ReplaceAllString(in, "$1 $2 $3") out = leftQuoteRe.ReplaceAllString(out, "$1") out = rightQuoteRe.ReplaceAllString(out, "$1") @@ -72,7 +60,6 @@ func Format(in string) (out string) { out = s.format(out) } - out = removeFullDateSpacing(out) out = spaceDashWithHans(out) return diff --git a/format_test.go b/format_test.go index 020e9a2..ec2a16d 100644 --- a/format_test.go +++ b/format_test.go @@ -1,20 +1,17 @@ package autocorrect import ( - "strings" "testing" -) -func assertEqual(t *testing.T, exptected, actual string) { - if !strings.EqualFold(exptected, actual) { - t.Errorf("\nexptected: %s\nactual : %s", exptected, actual) - } -} + "github.com/longbridgeapp/assert" +) func assertCases(t *testing.T, cases map[string]string) { + t.Helper() + for source, exptected := range cases { actual := Format(source) - assertEqual(t, exptected, actual) + assert.Equal(t, exptected, actual) } } @@ -86,9 +83,9 @@ func TestFormatForDate(t *testing.T) { "于3月10日开始": "于 3 月 10 日开始", "于3月开始": "于 3 月开始", "于2009年开始": "于 2009 年开始", - "正式发布2013年3月10日-Ruby Saturday活动召集": "正式发布2013年3月10日-Ruby Saturday 活动召集", - "正式发布2013年3月10号发布": "正式发布2013年3月10号发布", - "2013年12月22号开始出发": "2013年12月22号开始出发", + "正式发布2013年3月10日-Ruby Saturday活动召集": "正式发布 2013 年 3 月 10 日-Ruby Saturday 活动召集", + "正式发布2013年3月10号发布": "正式发布 2013 年 3 月 10 号发布", + "2013年12月22号开始出发": "2013 年 12 月 22 号开始出发", "12月22号开始出发": "12 月 22 号开始出发", "22号开始出发": "22 号开始出发", } @@ -156,5 +153,5 @@ func TestFormat_CJK(t *testing.T) { func TestFormatWithhaftwidth(t *testing.T) { text := `自动转换全角“字符、数字”:我们将在(16:32)出发去CBD中心。` out := Format(text) - assertEqual(t, "自动转换全角 “字符、数字”:我们将在(16:32)出发去 CBD 中心。", out) + assert.Equal(t, "自动转换全角 “字符、数字”:我们将在(16:32)出发去 CBD 中心。", out) } diff --git a/fullwidth_test.go b/fullwidth_test.go index ca1fefe..d6a0f19 100644 --- a/fullwidth_test.go +++ b/fullwidth_test.go @@ -2,6 +2,8 @@ package autocorrect import ( "testing" + + "github.com/longbridgeapp/assert" ) func Test_fullwidth(t *testing.T) { @@ -19,6 +21,6 @@ func Test_fullwidth(t *testing.T) { for source, exptected := range cases { actual := Format(source) - assertEqual(t, exptected, actual) + assert.Equal(t, exptected, actual) } } diff --git a/halfwidth_test.go b/halfwidth_test.go index a33d77c..4c09a13 100644 --- a/halfwidth_test.go +++ b/halfwidth_test.go @@ -8,8 +8,8 @@ import ( func Test_haftwidth(t *testing.T) { source := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" - assertEqual(t, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", haftwidth(source)) - assertEqual(t, "他说:我们将在16:32分出发去CBD中心。", haftwidth("他说:我们将在16:32分出发去CBD中心。")) + assert.Equal(t, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", haftwidth(source)) + assert.Equal(t, "他说:我们将在16:32分出发去CBD中心。", haftwidth("他说:我们将在16:32分出发去CBD中心。")) // Fullwidth space assert.Equal(t, "ジョイフル-後場売り気配 200 店舗を閉鎖へ 7 月以降、不採算店中心に", haftwidth("ジョイフル-後場売り気配 200 店舗を閉鎖へ 7 月以降、不採算店中心に")) } diff --git a/html_test.go b/html_test.go index 13d89ed..04fdab4 100644 --- a/html_test.go +++ b/html_test.go @@ -3,22 +3,11 @@ package autocorrect import ( "fmt" "io/ioutil" - "regexp" "testing" "github.com/longbridgeapp/assert" ) -var ( - htmlSpaceRe = regexp.MustCompile(`>[\s]+<`) -) - -func assertHTMLEqual(t *testing.T, exptected, actual string) { - if htmlSpaceRe.ReplaceAllString(exptected, "><") != htmlSpaceRe.ReplaceAllString(actual, "><") { - t.Errorf("\nexptected:\n%s\nactual :\n%s", exptected, actual) - } -} - func readFile(filename string) (out string) { data, err := ioutil.ReadFile(fmt.Sprintf("./_fixtures/%s", filename)) if err != nil { @@ -41,7 +30,8 @@ func TestFormatHTMLWithFixtuires(t *testing.T) { if err != nil { t.Error(err) } - assertHTMLEqual(t, expected, out) + fmt.Println(out) + assert.EqualHTML(t, expected, out) } func TestFormatHTMLWithSameTextInAttribute(t *testing.T) { @@ -51,25 +41,25 @@ func TestFormatHTMLWithSameTextInAttribute(t *testing.T) { if err != nil { t.Error(err) } - assertHTMLEqual(t, expected, out) + assert.EqualHTML(t, expected, out) } func TestFormatHTMLWithEscapedHTML(t *testing.T) { html := `据2019年12月27日,三生制药获JP Morgan Chase & Co.每股均价9.582港元,增持270.3万股
` - expected := `据2019年12月27日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股
` + expected := `据 2019 年 12 月 27 日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股
` out, err := FormatHTML(html) if err != nil { t.Error(err) } - assertHTMLEqual(t, expected, out) + assert.EqualHTML(t, expected, out) html = `据2019年12月27日,三生制药获JP Morgan Chase & Co.每股均价9.582港元,增持270.3万股
` - expected = `据2019年12月27日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股
` + expected = `据 2019 年 12 月 27 日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股
` out, err = FormatHTML(html) if err != nil { t.Error(err) } - assertHTMLEqual(t, expected, out) + assert.EqualHTML(t, expected, out) } func TestFormatHTML_haftwidth(t *testing.T) { @@ -80,12 +70,13 @@ func TestFormatHTML_haftwidth(t *testing.T) { t.Error(err) } - assertEqual(t, "自动转换全角 “字符、数字”:我们将在(16:32)出发去 CBD 中心。
", out) + assert.Equal(t, "自动转换全角 “字符、数字”:我们将在(16:32)出发去 CBD 中心。
", out) } func TestUnformatHTML(t *testing.T) { raw := "Hello world this is english.
2018 至 2019 财年,印度电力部门总进口额为 7100 亿卢比(约合 672 亿人民币)其中 2100 亿卢比来自中国
占比 29.6%,这意味着中国是印度电力设备的国外主要供应商。
" out, err := UnformatHTML(raw) assert.NoError(t, err) - assertHTMLEqual(t, "Hello world this is english.
2018至2019财年,印度电力部门总进口额为7100亿卢比(约合672亿人民币)其中2100亿卢比来自中国
占比29.6%,这意味着中国是印度电力设备的国外主要供应商。
", out) + assert.EqualHTML(t, "Hello world this is english.
2018至2019财年,印度电力部门总进口额为7100亿卢比(约合672亿人民币)其中2100亿卢比来自中国
占比29.6%,这意味着中国是印度电力设备的国外主要供应商。
", out) + }