Skip to content

Commit

Permalink
Add space for full date
Browse files Browse the repository at this point in the history
  • Loading branch information
huacnlee committed Jul 27, 2021
1 parent a50ee9c commit f22683d
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 59 deletions.
3 changes: 3 additions & 0 deletions .autocorrectignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*_test.go
_fixtures/**/*.txt
README.md
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func main() {
// => "于 3 月 10 日开始"

autocorrect.Format("包装日期为2013年3月10日")
// => "包装日期为2013年3月10日"
// => "包装日期为 2013 年 3 月 10 日"

autocorrect.Format("生产环境中使用Go")
# => "生产环境中使用 Go"
Expand Down Expand Up @@ -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

Expand Down
8 changes: 4 additions & 4 deletions _fixtures/example.expected.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,20 @@
}
</style>
<p data-value="咖啡创始人兼CEO钱治亚">
瑞幸<strong>咖啡创始人兼 CEO 钱治亚</strong>在瑞幸咖啡举行的供应商大会上宣布,瑞幸咖啡<b>在 2021 年的门店数量将达到<i>1 万</i></b>家。同时,瑞幸将成为中国最大的连锁咖啡品牌,在门店与消费杯数方面超过星巴克。另外,2019年7月11日,瑞幸咖啡发布了进军新鲜现制茶饮市场的战略级产品 “小鹿茶。同时,其也在积极探索海外市场,同年 9 月 3 日,瑞幸咖啡宣布将小鹿茶作为瑞幸咖啡旗下独立品牌运营并采用新零售合伙人的模式。
瑞幸<strong>咖啡创始人兼 CEO 钱治亚</strong>在瑞幸咖啡举行的供应商大会上宣布,瑞幸咖啡<b>在 2021 年的门店数量将达到<i>1 万</i></b>家。同时,瑞幸将成为中国最大的连锁咖啡品牌,在门店与消费杯数方面超过星巴克。另外,2019 年 7 月 11 日,瑞幸咖啡发布了进军新鲜现制茶饮市场的战略级产品 “小鹿茶。同时,其也在积极探索海外市场,同年 9 月 3 日,瑞幸咖啡宣布将小鹿茶作为瑞幸咖啡旗下独立品牌运营并采用新零售合伙人的模式。
</p>
<pre>title := "咖啡创始人兼CEO钱治亚"</pre>
<pre><code>title := "咖啡创始人兼CEO钱治亚"</code></pre>
<textarea>咖啡创始人兼CEO钱治亚</textarea>
<p><img src="https://l.ruby-china.org/foo/bar.jpg" alt="普通图片"/></p>
<p>
2019年7月22日,瑞幸咖啡与 Americana 集团 (中东地区最大的食品制造及销售公司) 签署了战略合作框架协议,双方计划共同设立合资公司,在大中东和印度地区开展咖啡新零售业务。此外,同年的 9 月 25 日,瑞幸咖啡还与路易达孚集团签署了战略合作协议,双方将通过共建的合资公司开发中国高品质果汁联合品牌业务。
2019 年 7 月 22 日,瑞幸咖啡与 Americana 集团 (中东地区最大的食品制造及销售公司) 签署了战略合作框架协议,双方计划共同设立合资公司,在大中东和印度地区开展咖啡新零售业务。此外,同年的 9 月 25 日,瑞幸咖啡还与路易达孚集团签署了战略合作协议,双方将通过共建的合资公司开发中国高品质果汁联合品牌业务。
</p>
<div class="first-s1">
<p>
瑞幸咖啡于 2019 年 5 月登陆纳斯达克市场。此前瑞幸咖啡发布的 2019 年第三季度财报显示,第三季度瑞幸咖啡产品净收入为 15.41 亿元,相比去年同期 2.4 亿元增长 540%。第三季度亏损 5.32 亿元,比去年同期的 4.84 亿元增长了 9.9%。预计 2019 财年,瑞幸咖啡的产品净收入将维持在 21-22 亿元之间。
</p>
</div>
<p>智通财经 APP 获悉,三生制药 (01530) 获 JP Morgan 增持 270.3 万股,涉资约 2590 万港元。截至 10 时 33 分,涨 4.5%,报价 10.68 港元,成交额 6220 万。</p>
<p>据港交所最新权益披露资料显示,2019年12月27日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股,总价约 2590 万港元。</p>
</div>
<p>据港交所最新权益披露资料显示,2019 年 12 月 27 日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股,总价约 2590 万港元。</p>
</div>
15 changes: 1 addition & 14 deletions format.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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")
Expand All @@ -72,7 +60,6 @@ func Format(in string) (out string) {
out = s.format(out)
}

out = removeFullDateSpacing(out)
out = spaceDashWithHans(out)

return
Expand Down
21 changes: 9 additions & 12 deletions format_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
}

Expand Down Expand Up @@ -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 号开始出发",
}
Expand Down Expand Up @@ -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)
}
4 changes: 3 additions & 1 deletion fullwidth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package autocorrect

import (
"testing"

"github.com/longbridgeapp/assert"
)

func Test_fullwidth(t *testing.T) {
Expand All @@ -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)
}
}
4 changes: 2 additions & 2 deletions halfwidth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 月以降、不採算店中心に"))
}
Expand Down
29 changes: 10 additions & 19 deletions html_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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) {
Expand All @@ -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 := `<p>据2019年12月27日,三生制药获JP Morgan Chase &amp; Co.每股均价9.582港元,增持270.3万股</p>`
expected := `<p>据2019年12月27日,三生制药获 JP Morgan Chase &amp; Co.每股均价 9.582 港元,增持 270.3 万股</p>`
expected := `<p>据 2019 年 12 月 27 日,三生制药获 JP Morgan Chase &amp; Co.每股均价 9.582 港元,增持 270.3 万股</p>`
out, err := FormatHTML(html)
if err != nil {
t.Error(err)
}
assertHTMLEqual(t, expected, out)
assert.EqualHTML(t, expected, out)

html = `<p>据2019年12月27日,三生制药获JP Morgan Chase & Co.每股均价9.582港元,增持270.3万股</p>`
expected = `<p>据2019年12月27日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股</p>`
expected = `<p>据 2019 年 12 月 27 日,三生制药获 JP Morgan Chase & Co.每股均价 9.582 港元,增持 270.3 万股</p>`
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) {
Expand All @@ -80,12 +70,13 @@ func TestFormatHTML_haftwidth(t *testing.T) {
t.Error(err)
}

assertEqual(t, "<p>自动转换全角 “字符、数字”:我们将在(16:32)出发去 CBD 中心。</p>", out)
assert.Equal(t, "<p>自动转换全角 “字符、数字”:我们将在(16:32)出发去 CBD 中心。</p>", out)
}

func TestUnformatHTML(t *testing.T) {
raw := "<p>Hello world this is english.</p><p><strong>2018 至 2019 财年</strong>,印度电力部门总进口额为 7100 亿卢比(约合 672 亿人民币)其中 2100 亿卢比来自中国</p><p>占比 29.6%,这意味着中国是印度电力设备的国外主要供应商。</p>"
out, err := UnformatHTML(raw)
assert.NoError(t, err)
assertHTMLEqual(t, "<p>Hello world this is english.</p><p><strong>2018至2019财年</strong>,印度电力部门总进口额为7100亿卢比(约合672亿人民币)其中2100亿卢比来自中国</p><p>占比29.6%,这意味着中国是印度电力设备的国外主要供应商。</p>", out)
assert.EqualHTML(t, "<p>Hello world this is english.</p><p><strong>2018至2019财年</strong>,印度电力部门总进口额为7100亿卢比(约合672亿人民币)其中2100亿卢比来自中国</p><p>占比29.6%,这意味着中国是印度电力设备的国外主要供应商。</p>", out)

}

0 comments on commit f22683d

Please sign in to comment.