twfilter 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +37 -0
- data/LICENSE +19 -0
- data/NOTICES.md +93 -0
- data/README.md +364 -0
- data/lib/twfilter/block.rb +36 -0
- data/lib/twfilter/checks/erhua.rb +40 -0
- data/lib/twfilter/checks/lexicon.rb +83 -0
- data/lib/twfilter/checks/script.rb +71 -0
- data/lib/twfilter/checks/shape.rb +40 -0
- data/lib/twfilter/checks/wenyan.rb +32 -0
- data/lib/twfilter/data/MANIFEST.json +85 -0
- data/lib/twfilter/data/cantonese.txt +17 -0
- data/lib/twfilter/data/converted_orthography.txt +14 -0
- data/lib/twfilter/data/erhua_headed.txt +14 -0
- data/lib/twfilter/data/erhua_tailed.txt +36 -0
- data/lib/twfilter/data/foreign_topics.txt +80 -0
- data/lib/twfilter/data/mainland_exceptions.tsv +6 -0
- data/lib/twfilter/data/mainland_hard.tsv +149 -0
- data/lib/twfilter/data/mainland_soft.tsv +38 -0
- data/lib/twfilter/data/moe_common.txt +4808 -0
- data/lib/twfilter/data/moe_exception.txt +12 -0
- data/lib/twfilter/data/moe_rare.txt +18356 -0
- data/lib/twfilter/data/moe_secondary.txt +6343 -0
- data/lib/twfilter/data/regional_hard.tsv +19 -0
- data/lib/twfilter/data/simplified_only.txt +3785 -0
- data/lib/twfilter/data/taiwan_grammar.txt +20 -0
- data/lib/twfilter/data/taiwan_lexicon.txt +51 -0
- data/lib/twfilter/data/taiwan_markers.txt +66 -0
- data/lib/twfilter/data/taiwan_particles.txt +7 -0
- data/lib/twfilter/data/variants_used_in_taiwan.txt +16 -0
- data/lib/twfilter/data/wenyan.txt +4 -0
- data/lib/twfilter/errors.rb +12 -0
- data/lib/twfilter/evidence.rb +44 -0
- data/lib/twfilter/finding.rb +42 -0
- data/lib/twfilter/han.rb +30 -0
- data/lib/twfilter/policy.rb +68 -0
- data/lib/twfilter/punctuation.rb +106 -0
- data/lib/twfilter/sentences.rb +32 -0
- data/lib/twfilter/subject.rb +28 -0
- data/lib/twfilter/tables.rb +140 -0
- data/lib/twfilter/version.rb +5 -0
- data/lib/twfilter.rb +57 -0
- data/licenses/APACHE-2.0.txt +202 -0
- data/sig/twfilter.rbs +215 -0
- metadata +137 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TWFilter
|
|
4
|
+
module Checks
|
|
5
|
+
module Lexicon
|
|
6
|
+
NAME = :lexicon
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
def call(subject)
|
|
10
|
+
findings = []
|
|
11
|
+
|
|
12
|
+
hard = hits(subject, :hard, hard_terms)
|
|
13
|
+
findings << finding(:mainland, hard.first(DETAIL_SAMPLE).join(" "), :reject) if hard.any?
|
|
14
|
+
|
|
15
|
+
severity = subject.policy.soft_lexicon_rejects ? :reject : :mark
|
|
16
|
+
soft = hits(subject, :soft, soft_terms)
|
|
17
|
+
findings << finding(:mainland_soft, soft.first(DETAIL_SAMPLE).join(" "), severity) if soft.any?
|
|
18
|
+
|
|
19
|
+
cantonese = subject.text.scan(union(:cantonese, cantonese_chars)).uniq
|
|
20
|
+
findings << finding(:cantonese, cantonese.first(DETAIL_SAMPLE).join, :reject) if cantonese.any?
|
|
21
|
+
|
|
22
|
+
regional = hits(subject, :regional, regional_terms)
|
|
23
|
+
findings << finding(:regional, regional.first(DETAIL_SAMPLE).join(" "), :reject) if regional.any?
|
|
24
|
+
|
|
25
|
+
topics = subject.text.scan(union(:topics, foreign_topics)).uniq.select { |term| topic?(subject.text, term) }
|
|
26
|
+
if topics.any?
|
|
27
|
+
severity = subject.policy.foreign_topics_reject ? :reject : :mark
|
|
28
|
+
findings << finding(:foreign_topic, topics.first(DETAIL_SAMPLE).join(" "), severity)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
findings
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def taiwan_form(term) = hard_terms[term] || soft_terms[term]
|
|
35
|
+
|
|
36
|
+
def hard_terms = @hard_terms ||= forms("mainland_hard.tsv")
|
|
37
|
+
|
|
38
|
+
def soft_terms = @soft_terms ||= forms("mainland_soft.tsv")
|
|
39
|
+
|
|
40
|
+
def forms(table) = Tables.columns(table).to_h { |mainland, taiwan, *| [mainland, taiwan] }.freeze
|
|
41
|
+
|
|
42
|
+
def exceptions = Tables.groups("mainland_exceptions.tsv")
|
|
43
|
+
|
|
44
|
+
def regional_terms = @regional_terms ||= forms("regional_hard.tsv")
|
|
45
|
+
|
|
46
|
+
def cantonese_chars = Tables.rows("cantonese.txt")
|
|
47
|
+
|
|
48
|
+
def foreign_topics = Tables.rows("foreign_topics.txt")
|
|
49
|
+
|
|
50
|
+
def reset! = (@hard_terms = @soft_terms = @regional_terms = @unions = nil)
|
|
51
|
+
|
|
52
|
+
# Taipei streets carry mainland city names by KMT-era decree, so an address suffix suppresses a topic hit.
|
|
53
|
+
ADDRESS = /[東西南北中]?(?:[一二三四五六七八九十]段)?(?:路|街|巷|弄|大道|夜市)/
|
|
54
|
+
|
|
55
|
+
def topic?(text, term)
|
|
56
|
+
return false unless text.include?(term)
|
|
57
|
+
|
|
58
|
+
text.scan(term).length > text.scan(/#{Regexp.escape(term)}#{ADDRESS}/).length
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# One union scan per table beats 200-odd substring searches; the exception mask then
|
|
62
|
+
# runs only for terms that actually matched.
|
|
63
|
+
def union(name, terms) = unions[name] ||= Regexp.union(terms.sort_by { |term| -term.length })
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
def unions = @unions ||= {}
|
|
68
|
+
|
|
69
|
+
def hits(subject, band, terms)
|
|
70
|
+
found = subject.text.scan(union(band, terms.keys)).uniq
|
|
71
|
+
return found if found.empty?
|
|
72
|
+
|
|
73
|
+
found.select { |term|
|
|
74
|
+
allowed = exceptions[term]
|
|
75
|
+
allowed.nil? || subject.masked(allowed).include?(term)
|
|
76
|
+
}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def finding(code, detail, severity) = Finding.new(check: NAME, code: code, severity: severity, detail: detail)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TWFilter
|
|
4
|
+
module Checks
|
|
5
|
+
module Script
|
|
6
|
+
NAME = :script
|
|
7
|
+
TIER_FILES = {
|
|
8
|
+
TIERS.fetch(:common) => "moe_common.txt",
|
|
9
|
+
TIERS.fetch(:secondary) => "moe_secondary.txt",
|
|
10
|
+
TIERS.fetch(:rare) => "moe_rare.txt"
|
|
11
|
+
}.freeze
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
def call(subject)
|
|
15
|
+
findings = []
|
|
16
|
+
|
|
17
|
+
simplified = subject.han_chars.select { |char| simplified_only.include?(char) }.uniq
|
|
18
|
+
findings << finding(:simplified, simplified.first(DETAIL_SAMPLE).join) if simplified.any?
|
|
19
|
+
|
|
20
|
+
converted = subject.han_chars.select { |char| converted_orthography.include?(char) }.uniq
|
|
21
|
+
if converted.any?
|
|
22
|
+
severity = subject.policy.orthography_rejects ? :reject : :mark
|
|
23
|
+
findings << finding(:converted_orthography, converted.first(DETAIL_SAMPLE).join, severity)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
unlisted = subject.han_chars.reject { |char| tiers.key?(char) }.uniq
|
|
27
|
+
findings << finding(:unlisted, unlisted.first(DETAIL_SAMPLE).join) if unlisted.any?
|
|
28
|
+
|
|
29
|
+
limit = subject.policy.tier_limit
|
|
30
|
+
above = subject.han_chars.select { |char| (tiers[char] || 0) > limit }.uniq
|
|
31
|
+
findings << finding(:above_tier, above.first(DETAIL_SAMPLE).join) if above.any?
|
|
32
|
+
|
|
33
|
+
findings
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def tier(char) = tiers[char]
|
|
37
|
+
|
|
38
|
+
def tier_of(text)
|
|
39
|
+
levels = text.each_char.filter_map { |char| tiers[char] if Han.char?(char) }
|
|
40
|
+
return nil if levels.length < text.each_char.count { |char| Han.char?(char) }
|
|
41
|
+
|
|
42
|
+
levels.max || TIERS.fetch(:common)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def tiers
|
|
46
|
+
@tiers ||= TIER_FILES
|
|
47
|
+
.flat_map { |level, file| Tables.rows(file).map { |char| [char, level] } }
|
|
48
|
+
.reverse
|
|
49
|
+
.to_h
|
|
50
|
+
.merge(Tables.rows("moe_exception.txt").to_h { |char| [char, TIERS.fetch(:common)] })
|
|
51
|
+
.freeze
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def reset! = @tiers = nil
|
|
55
|
+
|
|
56
|
+
def simplified_only = Tables.set("simplified_only.txt")
|
|
57
|
+
|
|
58
|
+
def converted_orthography = Tables.set("converted_orthography.txt")
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
def finding(code, detail, severity = :reject) = Finding.new(
|
|
63
|
+
check: NAME,
|
|
64
|
+
code: code,
|
|
65
|
+
severity: severity,
|
|
66
|
+
detail: detail
|
|
67
|
+
)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TWFilter
|
|
4
|
+
module Checks
|
|
5
|
+
module Shape
|
|
6
|
+
NAME = :shape
|
|
7
|
+
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
def call(subject)
|
|
11
|
+
return [finding(:empty)] if subject.empty?
|
|
12
|
+
|
|
13
|
+
findings = []
|
|
14
|
+
findings << finding(:no_han) if subject.han.zero?
|
|
15
|
+
|
|
16
|
+
range = subject.policy.han_range
|
|
17
|
+
unless range.cover?(subject.han)
|
|
18
|
+
code = subject.han < range.first ? :too_short : :too_long
|
|
19
|
+
findings << finding(code, subject.han.to_s)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
if subject.ratio < subject.policy.min_han_ratio
|
|
23
|
+
findings << finding(:low_han_ratio, format("%.2f", subject.ratio))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
offenders = Punctuation.offenders(subject.text, punctuation: subject.policy.punctuation)
|
|
27
|
+
findings << finding(:junk_characters, offenders.first(DETAIL_SAMPLE).join) if offenders.any?
|
|
28
|
+
|
|
29
|
+
unless subject.policy.allow_latin
|
|
30
|
+
latin = subject.text.scan(/[A-Za-z]+/).uniq
|
|
31
|
+
findings << finding(:latin, latin.first(DETAIL_SAMPLE).join(" ")) if latin.any?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
findings
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def finding(code, detail = nil) = Finding.new(check: NAME, code: code, detail: detail)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TWFilter
|
|
4
|
+
module Checks
|
|
5
|
+
module Wenyan
|
|
6
|
+
NAME = :wenyan
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
def call(subject)
|
|
10
|
+
policy = subject.policy
|
|
11
|
+
return [] if subject.han < policy.wenyan_min_han
|
|
12
|
+
|
|
13
|
+
hits = markers.sum { |char| subject.text.count(char) }
|
|
14
|
+
return [] if hits < policy.wenyan_min_hits
|
|
15
|
+
|
|
16
|
+
density = density(subject)
|
|
17
|
+
return [] if density <= policy.wenyan_max_density
|
|
18
|
+
|
|
19
|
+
[Finding.new(check: NAME, code: :literary_density, detail: format("%.0f%%", density * 100))]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def density(subject)
|
|
23
|
+
return 0.0 if subject.han.zero?
|
|
24
|
+
|
|
25
|
+
markers.sum { |char| subject.text.count(char) }.fdiv(subject.han)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def markers = Tables.rows("wenyan.txt")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.1.0",
|
|
3
|
+
"tables": {
|
|
4
|
+
"cantonese.txt": {
|
|
5
|
+
"rows": 17,
|
|
6
|
+
"sha256": "3f37b31e98f167cf860ab4068cdf0eaebb7702afccb8b3701dec72cf7223dc2f"
|
|
7
|
+
},
|
|
8
|
+
"converted_orthography.txt": {
|
|
9
|
+
"rows": 14,
|
|
10
|
+
"sha256": "073f87fffb5922f45a2b1af40deca536dddafc502cc73a87b05846d29b0ecc6d"
|
|
11
|
+
},
|
|
12
|
+
"erhua_headed.txt": {
|
|
13
|
+
"rows": 14,
|
|
14
|
+
"sha256": "0163fdff14363f3479a072c54a411f37ff3533b7835e3aa6133cc9b56fdf7364"
|
|
15
|
+
},
|
|
16
|
+
"erhua_tailed.txt": {
|
|
17
|
+
"rows": 36,
|
|
18
|
+
"sha256": "ef0bede84353fa8f555a9ca74ba7bad0b9647622f33b9694bd6ad61d51fb8e14"
|
|
19
|
+
},
|
|
20
|
+
"foreign_topics.txt": {
|
|
21
|
+
"rows": 80,
|
|
22
|
+
"sha256": "d1685884afd1aafb5c7be07e222fedbd3a4ca1ccf3d96754dae90fdcb32a472f"
|
|
23
|
+
},
|
|
24
|
+
"mainland_exceptions.tsv": {
|
|
25
|
+
"rows": 6,
|
|
26
|
+
"sha256": "647077330116c176dd0aaa983254fbee2129d68da7fe5dffdc5d72c4e5f26bcc"
|
|
27
|
+
},
|
|
28
|
+
"mainland_hard.tsv": {
|
|
29
|
+
"rows": 149,
|
|
30
|
+
"sha256": "11c8c4219b1f5c578b33183eeb93992f932d9ba47ce8ab6d7aea15089468cc69"
|
|
31
|
+
},
|
|
32
|
+
"mainland_soft.tsv": {
|
|
33
|
+
"rows": 38,
|
|
34
|
+
"sha256": "1435fc2814454e2675fc4f76528abfa448a18e7e223254bad66ac73b409a2a18"
|
|
35
|
+
},
|
|
36
|
+
"moe_common.txt": {
|
|
37
|
+
"rows": 4808,
|
|
38
|
+
"sha256": "1e052f87442c6fd97f12c23e1b966e8beb9222802539943409c8b12778104fcb"
|
|
39
|
+
},
|
|
40
|
+
"moe_exception.txt": {
|
|
41
|
+
"rows": 12,
|
|
42
|
+
"sha256": "9f9e62c0949845e6925c400b75d887a40b8bb0a6ef5e0d9596674033c4ba06fe"
|
|
43
|
+
},
|
|
44
|
+
"moe_rare.txt": {
|
|
45
|
+
"rows": 18356,
|
|
46
|
+
"sha256": "1c977e350b1f05edbaf416e55101308e18f5094f5a0dcbdd226985645ee0e34c"
|
|
47
|
+
},
|
|
48
|
+
"moe_secondary.txt": {
|
|
49
|
+
"rows": 6343,
|
|
50
|
+
"sha256": "b57bce3314a4cdde1d8ac3de18f3a65e3319583b0dab9a35ad2c9f1da2d563ef"
|
|
51
|
+
},
|
|
52
|
+
"regional_hard.tsv": {
|
|
53
|
+
"rows": 19,
|
|
54
|
+
"sha256": "ab27602d5c653b048150f09359d3981d49c28c2cfb19fa6246409b65270b224f"
|
|
55
|
+
},
|
|
56
|
+
"simplified_only.txt": {
|
|
57
|
+
"rows": 3785,
|
|
58
|
+
"sha256": "3fe3435085f1a30635a209e47c248737a02c12a4fe555dd6a5e79932ab477868"
|
|
59
|
+
},
|
|
60
|
+
"taiwan_grammar.txt": {
|
|
61
|
+
"rows": 20,
|
|
62
|
+
"sha256": "75883c2ea49680a5742d9e96d4a957389b5ec7d4230ee5c999f3736e7907a04f"
|
|
63
|
+
},
|
|
64
|
+
"taiwan_lexicon.txt": {
|
|
65
|
+
"rows": 51,
|
|
66
|
+
"sha256": "2660534604ee7c3116c9ccf0ca2a18b50dc4187bd33703c84ed9598877195dad"
|
|
67
|
+
},
|
|
68
|
+
"taiwan_markers.txt": {
|
|
69
|
+
"rows": 66,
|
|
70
|
+
"sha256": "ba5f9207bc921bfac3f77cb5f8743fd4e7ae013da222df4a66390eaf7e1a3cef"
|
|
71
|
+
},
|
|
72
|
+
"taiwan_particles.txt": {
|
|
73
|
+
"rows": 7,
|
|
74
|
+
"sha256": "5b67a3e12d0f90b05ec888188258749e2841b81ee3dc495084eefebfe4324eb2"
|
|
75
|
+
},
|
|
76
|
+
"variants_used_in_taiwan.txt": {
|
|
77
|
+
"rows": 16,
|
|
78
|
+
"sha256": "17ddc25d887834f44faa1173c61219066b708849cd56bdaa30d4be4f2d5fc9a9"
|
|
79
|
+
},
|
|
80
|
+
"wenyan.txt": {
|
|
81
|
+
"rows": 4,
|
|
82
|
+
"sha256": "6e554eab92ef5eabaa51958c6ae94744b5339c7a63d2865080b1587483ac9126"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
一帶一路
|
|
2
|
+
上海
|
|
3
|
+
中共
|
|
4
|
+
中國大陸
|
|
5
|
+
中央電視台
|
|
6
|
+
中華人民共和國
|
|
7
|
+
京東
|
|
8
|
+
人民幣
|
|
9
|
+
人民日報
|
|
10
|
+
入境處
|
|
11
|
+
全國人大
|
|
12
|
+
全面建成小康社會
|
|
13
|
+
兩會
|
|
14
|
+
八達通
|
|
15
|
+
共產黨
|
|
16
|
+
北京
|
|
17
|
+
十四五
|
|
18
|
+
南京
|
|
19
|
+
南寧
|
|
20
|
+
南昌
|
|
21
|
+
合肥
|
|
22
|
+
呼和浩特
|
|
23
|
+
哈爾濱
|
|
24
|
+
國務院
|
|
25
|
+
城管
|
|
26
|
+
大連
|
|
27
|
+
天津
|
|
28
|
+
太原
|
|
29
|
+
央視
|
|
30
|
+
小康社會
|
|
31
|
+
居委會
|
|
32
|
+
市委書記
|
|
33
|
+
廈門
|
|
34
|
+
廉政公署
|
|
35
|
+
廣州
|
|
36
|
+
建屋發展局
|
|
37
|
+
強積金
|
|
38
|
+
微信
|
|
39
|
+
成都
|
|
40
|
+
房屋署
|
|
41
|
+
支付寶
|
|
42
|
+
政務司
|
|
43
|
+
政協
|
|
44
|
+
教育統籌局
|
|
45
|
+
新華社
|
|
46
|
+
旺角
|
|
47
|
+
昆明
|
|
48
|
+
春運
|
|
49
|
+
杭州
|
|
50
|
+
武漢
|
|
51
|
+
武警
|
|
52
|
+
水務署
|
|
53
|
+
油麻地
|
|
54
|
+
消防處
|
|
55
|
+
淘寶
|
|
56
|
+
深圳
|
|
57
|
+
濟南
|
|
58
|
+
瀋陽
|
|
59
|
+
烏節路
|
|
60
|
+
烏魯木齊
|
|
61
|
+
省委
|
|
62
|
+
石家莊
|
|
63
|
+
統戰部
|
|
64
|
+
脫貧攻堅
|
|
65
|
+
菠蘿包
|
|
66
|
+
蘇州
|
|
67
|
+
蘭州
|
|
68
|
+
街道辦
|
|
69
|
+
西安
|
|
70
|
+
西寧
|
|
71
|
+
觀塘
|
|
72
|
+
解放軍
|
|
73
|
+
貴陽
|
|
74
|
+
運輸署
|
|
75
|
+
鄭州
|
|
76
|
+
重慶
|
|
77
|
+
長沙
|
|
78
|
+
雙減
|
|
79
|
+
青島
|
|
80
|
+
高質量發展
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
信息 資訊 0 2612
|
|
2
|
+
文檔 文件 0 1649
|
|
3
|
+
初中 國中 0 490
|
|
4
|
+
公交車 公車 0 435
|
|
5
|
+
軟件 軟體 0 412
|
|
6
|
+
芯片 晶片 0 392
|
|
7
|
+
首席執行官 執行長 0 368
|
|
8
|
+
身份證 身分證 0 348
|
|
9
|
+
幾率 機率 0 292
|
|
10
|
+
屏幕 螢幕 0 248
|
|
11
|
+
硬件 硬體 0 228
|
|
12
|
+
數據庫 資料庫 0 216
|
|
13
|
+
錄像 錄影 0 199
|
|
14
|
+
出租車 計程車 0 174
|
|
15
|
+
演示文稿 簡報 0 163
|
|
16
|
+
意大利 義大利 0 148
|
|
17
|
+
短信 簡訊 0 134
|
|
18
|
+
互聯網 網際網路 0 119
|
|
19
|
+
互聯網絡 網際網路 0 119
|
|
20
|
+
裏頭 裡頭 0 116
|
|
21
|
+
信道 通道 0 103
|
|
22
|
+
納米 奈米 0 94
|
|
23
|
+
方便麪 泡麵/速食麵 0 88
|
|
24
|
+
方便麵 泡麵 0 87
|
|
25
|
+
內存 記憶體 0 85
|
|
26
|
+
服務器 伺服器 0 84
|
|
27
|
+
光盤 光碟 0 72
|
|
28
|
+
端口 埠 0 68
|
|
29
|
+
打印 列印 0 63
|
|
30
|
+
新西蘭 紐西蘭 0 61
|
|
31
|
+
模塊 模組 0 59
|
|
32
|
+
知識產權 智慧財產權 0 59
|
|
33
|
+
複印 影印 0 55
|
|
34
|
+
激光 雷射 0 54
|
|
35
|
+
帕勞 帛琉 0 45
|
|
36
|
+
缺省 預設 0 45
|
|
37
|
+
英偉達 輝達 0 45
|
|
38
|
+
奧巴馬 歐巴馬 0 43
|
|
39
|
+
集成電路 積體電路 0 42
|
|
40
|
+
優先級 優先順序 0 37
|
|
41
|
+
人情味兒 人情味 0 36
|
|
42
|
+
視頻會議 視訊會議 0 36
|
|
43
|
+
帶寬 頻寬 0 31
|
|
44
|
+
截屏 截圖 0 31
|
|
45
|
+
博客 部落格 0 30
|
|
46
|
+
鼠標 滑鼠 0 30
|
|
47
|
+
寬帶 寬頻 0 29
|
|
48
|
+
悉尼 雪梨 0 29
|
|
49
|
+
開市客 好市多 0 29
|
|
50
|
+
硬盤 硬碟 0 28
|
|
51
|
+
艾滋病 愛滋病 0 28
|
|
52
|
+
信息安全 資訊安全 0 27
|
|
53
|
+
字段 欄位 0 26
|
|
54
|
+
筆記本電腦 筆記型電腦 0 24
|
|
55
|
+
超聲波 超音波 0 24
|
|
56
|
+
存盤 存檔 0 23
|
|
57
|
+
殺毒 防毒 0 23
|
|
58
|
+
肯尼亞 肯亞 0 20
|
|
59
|
+
首席運營官 營運長 0 20
|
|
60
|
+
沙特阿拉伯 沙烏地阿拉伯 0 17
|
|
61
|
+
脫機 離線 0 17
|
|
62
|
+
信息技術 資訊科技 0 16
|
|
63
|
+
卡塔爾 卡達 0 16
|
|
64
|
+
移動通信 行動通訊 0 16
|
|
65
|
+
網吧 網咖 0 16
|
|
66
|
+
編程語言 程式語言 0 16
|
|
67
|
+
布什 布希 0 15
|
|
68
|
+
打印機 印表機 0 15
|
|
69
|
+
老撾 寮國 0 15
|
|
70
|
+
孤獨症 自閉症 0 14
|
|
71
|
+
打車 叫車 0 13
|
|
72
|
+
數據源 資料來源 0 13
|
|
73
|
+
希拉里 希拉蕊 0 12
|
|
74
|
+
二噁英 戴奧辛 0 11
|
|
75
|
+
尼日利亞 奈及利亞 0 11
|
|
76
|
+
桌面型 桌上型 0 11
|
|
77
|
+
U盤 隨身碟 0 10
|
|
78
|
+
交互式 互動式 0 10
|
|
79
|
+
優盤 隨身碟 0 10
|
|
80
|
+
格魯吉亞 喬治亞 0 10
|
|
81
|
+
總線 匯流排 0 10
|
|
82
|
+
計算機斷層 電腦斷層 0 10
|
|
83
|
+
阿爾茨海默病 阿茲海默症 0 10
|
|
84
|
+
阿爾茨海默症 阿茲海默症 0 10
|
|
85
|
+
移動網絡 行動網路 0 9
|
|
86
|
+
臺式機 桌上型電腦 0 9
|
|
87
|
+
光驅 光碟機 0 8
|
|
88
|
+
克林頓 柯林頓 0 8
|
|
89
|
+
原代碼 原始碼 0 8
|
|
90
|
+
唐氏綜合徵 唐氏症 0 8
|
|
91
|
+
唐氏綜合症 唐氏症 0 8
|
|
92
|
+
源代碼 原始碼 0 8
|
|
93
|
+
矢量 向量 0 8
|
|
94
|
+
航天飛機 太空梭 0 8
|
|
95
|
+
計算機科學 電腦科學 0 8
|
|
96
|
+
危地馬拉 瓜地馬拉 0 7
|
|
97
|
+
戛納 坎城 0 7
|
|
98
|
+
移動電話 行動電話 0 7
|
|
99
|
+
丙型肝炎 C型肝炎 0 6
|
|
100
|
+
克羅地亞 克羅埃西亞 0 6
|
|
101
|
+
冰棍 冰棒 0 6
|
|
102
|
+
圖瓦盧 吐瓦魯 0 6
|
|
103
|
+
大衆公司 福斯汽車 0 6
|
|
104
|
+
大衆汽車 福斯汽車 0 6
|
|
105
|
+
弗吉尼亞 維吉尼亞 0 6
|
|
106
|
+
心梗 心肌梗塞 0 6
|
|
107
|
+
心肌梗死 心肌梗塞 0 6
|
|
108
|
+
相冊 相簿 0 6
|
|
109
|
+
緩存 快取 0 6
|
|
110
|
+
萬維網 全球資訊網 0 6
|
|
111
|
+
調製解調器 數據機 0 6
|
|
112
|
+
阿拉伯聯合酋長國 阿拉伯聯合大公國 0 6
|
|
113
|
+
高性能計算 高效能運算 0 6
|
|
114
|
+
伯利茲 貝里斯 0 5
|
|
115
|
+
厄瓜多爾 厄瓜多 0 5
|
|
116
|
+
尼日爾 尼日 0 5
|
|
117
|
+
獲得性免疫缺陷綜合徵 後天免疫缺乏症候群 0 5
|
|
118
|
+
索馬里 索馬利亞 0 5
|
|
119
|
+
飛行模式 飛航模式 0 5
|
|
120
|
+
首席信息官 資訊長 0 5
|
|
121
|
+
佐治亞州 喬治亞州 0 4
|
|
122
|
+
固件 韌體 0 4
|
|
123
|
+
埃塞俄比亞 衣索比亞 0 4
|
|
124
|
+
威斯康星 威斯康辛 0 4
|
|
125
|
+
威斯康星州 威斯康辛州 0 4
|
|
126
|
+
字符串 字串 0 4
|
|
127
|
+
弗吉尼亞州 維吉尼亞州 0 4
|
|
128
|
+
所羅門羣島 索羅門群島 0 4
|
|
129
|
+
數組 陣列 0 4
|
|
130
|
+
斯洛文尼亞 斯洛維尼亞 0 4
|
|
131
|
+
正電子 正子 0 4
|
|
132
|
+
紅細胞 紅血球 0 4
|
|
133
|
+
蹦極 高空彈跳 0 4
|
|
134
|
+
伯克希爾-哈撒韋 波克夏海瑟威 0 3
|
|
135
|
+
伯克希爾哈撒韋 波克夏海瑟威 0 3
|
|
136
|
+
借記卡 簽帳金融卡 0 3
|
|
137
|
+
哈薩克斯坦 哈薩克 0 3
|
|
138
|
+
市場營銷 市場行銷 0 3
|
|
139
|
+
布基納法索 布吉納法索 0 3
|
|
140
|
+
帕金森病 帕金森氏症/巴金森氏症 0 3
|
|
141
|
+
彙編語言 組合語言 0 3
|
|
142
|
+
瑙魯 諾魯 0 3
|
|
143
|
+
甲型肝炎 A型肝炎 0 3
|
|
144
|
+
肖邦 蕭邦 0 3
|
|
145
|
+
艾奧瓦 愛荷華 0 3
|
|
146
|
+
艾奧瓦州 愛荷華州 0 3
|
|
147
|
+
薩蒂 薩提 0 3
|
|
148
|
+
鎿 錼 0 3
|
|
149
|
+
阿司匹林 阿斯匹靈 0 3
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
甚麼 什麼 321 15714
|
|
2
|
+
運行 執行 80 7692
|
|
3
|
+
創建 建立 35 1395
|
|
4
|
+
質量 品質 0 1304
|
|
5
|
+
視頻 影片/視訊 0 999
|
|
6
|
+
集成 整合 23 694
|
|
7
|
+
交互 互動 29 668
|
|
8
|
+
內核 核心 14 528
|
|
9
|
+
鏈接 連結 3 499
|
|
10
|
+
實時 即時 12 497
|
|
11
|
+
查找 查詢 7 470
|
|
12
|
+
水平 水準 64 336
|
|
13
|
+
指針 指標 12 324
|
|
14
|
+
視圖 檢視 5 308
|
|
15
|
+
概率 機率 3 292
|
|
16
|
+
特朗普 川普 4 282
|
|
17
|
+
嚐試 嘗試 1 262
|
|
18
|
+
人工智能 人工智慧 8 239
|
|
19
|
+
澳大利亞 澳洲 8 230
|
|
20
|
+
空調 冷氣 0 229
|
|
21
|
+
激活 啟用 4 195
|
|
22
|
+
仿真 模擬 4 180
|
|
23
|
+
拷貝 複製 5 170
|
|
24
|
+
塑料 塑膠 4 159
|
|
25
|
+
硅 矽 2 157
|
|
26
|
+
朝鮮 北韓 26 122
|
|
27
|
+
傳感 感測 3 69
|
|
28
|
+
內置 內建 3 63
|
|
29
|
+
早上好 早安 2 50
|
|
30
|
+
普京 普丁 2 49
|
|
31
|
+
癡呆症 失智症 2 45
|
|
32
|
+
抑鬱症 憂鬱症 1 32
|
|
33
|
+
分佈式 分散式 1 25
|
|
34
|
+
B超 超音波 1 24
|
|
35
|
+
分辨率 解析度 1 21
|
|
36
|
+
詞組 片語 0 7
|
|
37
|
+
前綴 字首 0 3
|
|
38
|
+
輔音 子音 0 3
|