llm_translator 0.0.1 → 0.0.3
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 +4 -4
- data/bin/llm_translator +2 -12
- data/lib/llm_translator.rb +190 -94
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3f1b58e414568d0d96d6955c6b0cb92fd9a4e15da6c2164ba27404c5ffffd79
|
4
|
+
data.tar.gz: 75210c017e5cfd1e89f6fba9730a29bc00d875b071a74db187578d361fcbbe89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a868ed54d37c22b4913c45a41b907f935f7fc4830198dfa30a6f0f8da9b01b3fc3bad62b0828a0529114fd9fa1333ccf2b0fd9aa91d9998e0c4a1b1bd84ac021
|
7
|
+
data.tar.gz: 00cb71780f92b061628260cbc8cc4a69662c2e519ceddb3ce7e0e1cc3f38c3b40c4c7d60a71d4c6fcf4e8ebc5a7fe65c49f5d2aa7968208631ae995cb6a4f60a
|
data/bin/llm_translator
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
2
|
require 'llm_translator'
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
:appscr => 'JLKxQO22jBft6w3PgLBh5as5iNJ1w5wS'
|
8
|
-
}
|
9
|
-
|
10
|
-
translator = LlmTranslator.new(config[:appkey], config[:appscr])
|
11
|
-
if ARGV[0] == '-f'
|
12
|
-
puts(translator.translate_mix_w File::readlines(ARGV[1]).join)
|
13
|
-
else
|
14
|
-
puts(translator.translate_mix_w ARGV[0])
|
15
|
-
end
|
4
|
+
llm = LlmTranslator.new nil
|
5
|
+
pp llm.command(ARGV)
|
data/lib/llm_translator.rb
CHANGED
@@ -3,114 +3,210 @@ require 'digest'
|
|
3
3
|
require 'net/http'
|
4
4
|
require 'securerandom'
|
5
5
|
require 'json'
|
6
|
+
require 'optparse'
|
7
|
+
|
8
|
+
LANG_CODE = %|
|
9
|
+
中文 zh-CHS
|
10
|
+
中文繁体 zh-CHT
|
11
|
+
英文 en
|
12
|
+
日文 ja
|
13
|
+
韩文 ko
|
14
|
+
法文 fr
|
15
|
+
西班牙文 es
|
16
|
+
葡萄牙文 pt
|
17
|
+
意大利文 it
|
18
|
+
俄文 ru
|
19
|
+
越南文 vi
|
20
|
+
德文 de
|
21
|
+
阿拉伯文 ar
|
22
|
+
印尼文 id
|
23
|
+
南非荷兰语 af
|
24
|
+
波斯尼亚语 bs
|
25
|
+
保加利亚语 bg
|
26
|
+
粤语 yue
|
27
|
+
加泰隆语 ca
|
28
|
+
克罗地亚语 hr
|
29
|
+
捷克语 cs
|
30
|
+
丹麦语 da
|
31
|
+
荷兰语 nl
|
32
|
+
爱沙尼亚语 et
|
33
|
+
斐济语 fj
|
34
|
+
芬兰语 fi
|
35
|
+
希腊语 el
|
36
|
+
海地克里奥尔语 ht
|
37
|
+
希伯来语 he
|
38
|
+
印地语 hi
|
39
|
+
白苗语 mww
|
40
|
+
匈牙利语 hu
|
41
|
+
斯瓦希里语 sw
|
42
|
+
克林贡语 tlh
|
43
|
+
拉脱维亚语 lv
|
44
|
+
立陶宛语 lt
|
45
|
+
马来语 ms
|
46
|
+
马耳他语 mt
|
47
|
+
挪威语 no
|
48
|
+
波斯语 fa
|
49
|
+
波兰语 pl
|
50
|
+
克雷塔罗奥托米语 otq
|
51
|
+
罗马尼亚语 ro
|
52
|
+
塞尔维亚语(西里尔文) sr-Cyrl
|
53
|
+
塞尔维亚语(拉丁文) sr-Latn
|
54
|
+
斯洛伐克语 sk
|
55
|
+
斯洛文尼亚语 sl
|
56
|
+
瑞典语 sv
|
57
|
+
塔希提语 ty
|
58
|
+
泰语 th
|
59
|
+
汤加语 to
|
60
|
+
土耳其语 tr
|
61
|
+
乌克兰语 uk
|
62
|
+
乌尔都语 ur
|
63
|
+
威尔士语 cy
|
64
|
+
尤卡坦玛雅语 yua
|
65
|
+
阿尔巴尼亚语 sq
|
66
|
+
阿姆哈拉语 am
|
67
|
+
亚美尼亚语 hy
|
68
|
+
阿塞拜疆语 az
|
69
|
+
孟加拉语 bn
|
70
|
+
巴斯克语 eu
|
71
|
+
白俄罗斯语 be
|
72
|
+
宿务语 ceb
|
73
|
+
科西嘉语 co
|
74
|
+
世界语 eo
|
75
|
+
菲律宾语 tl
|
76
|
+
弗里西语 fy
|
77
|
+
加利西亚语 gl
|
78
|
+
格鲁吉亚语 ka
|
79
|
+
古吉拉特语 gu
|
80
|
+
豪萨语 ha
|
81
|
+
夏威夷语 haw
|
82
|
+
冰岛语 is
|
83
|
+
伊博语 ig
|
84
|
+
爱尔兰语 ga
|
85
|
+
爪哇语 jw
|
86
|
+
卡纳达语 kn
|
87
|
+
哈萨克语 kk
|
88
|
+
高棉语 km
|
89
|
+
库尔德语 ku
|
90
|
+
柯尔克孜语 ky
|
91
|
+
老挝语 lo
|
92
|
+
拉丁语 la
|
93
|
+
卢森堡语 lb
|
94
|
+
马其顿语 mk
|
95
|
+
马尔加什语 mg
|
96
|
+
马拉雅拉姆语 ml
|
97
|
+
毛利语 mi
|
98
|
+
马拉地语 mr
|
99
|
+
蒙古语 mn
|
100
|
+
缅甸语 my
|
101
|
+
尼泊尔语 ne
|
102
|
+
齐切瓦语 ny
|
103
|
+
普什图语 ps
|
104
|
+
旁遮普语 pa
|
105
|
+
萨摩亚语 sm
|
106
|
+
苏格兰盖尔语 gd
|
107
|
+
塞索托语 st
|
108
|
+
修纳语 sn
|
109
|
+
信德语 sd
|
110
|
+
僧伽罗语 si
|
111
|
+
索马里语 so
|
112
|
+
巽他语 su
|
113
|
+
塔吉克语 tg
|
114
|
+
泰米尔语 ta
|
115
|
+
泰卢固语 te
|
116
|
+
乌兹别克语 uz
|
117
|
+
南非科萨语 xh
|
118
|
+
意第绪语 yi
|
119
|
+
约鲁巴语 yo
|
120
|
+
南非祖鲁语 zu|
|
6
121
|
|
7
122
|
class LlmTranslator
|
8
|
-
attr_accessor :q, :from, :to, :debug
|
9
|
-
T_URL_PATH = "https://openapi.youdao.com/api"
|
10
|
-
EN_REGEX = /\w+/
|
11
|
-
ZH_REGEX = /[\u4e00-\u9fa5]+/
|
12
|
-
MIX_EN_ZH_REGEX = /\w+|[^\w]+/
|
13
|
-
MIX_ZH_EN_REGEX = /[\u4e00-\u9fa5]+|[^\u4e00-\u9fa5]+/
|
14
|
-
ZH_SYMBOL = 'zh-CHS'
|
15
|
-
EN_SYMBOL = 'en'
|
16
123
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
124
|
+
attr_accessor :text,
|
125
|
+
:auto, # 自动中英互译
|
126
|
+
:detail, # 详细翻译
|
127
|
+
:from, # 源语言
|
128
|
+
:to # 目标语言
|
129
|
+
|
130
|
+
def initialize(text)
|
131
|
+
@text = text
|
132
|
+
@url = 'https://openapi.youdao.com/api'
|
133
|
+
@appkey = '0b53e81a10846a3a'
|
134
|
+
@appscr = 'JLKxQO22jBft6w3PgLBh5as5iNJ1w5wS'
|
135
|
+
@sign_type = 'v3'
|
136
|
+
@auto = true
|
137
|
+
@detail= false
|
24
138
|
end
|
25
139
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
140
|
+
def to_result
|
141
|
+
salt=SecureRandom::uuid
|
142
|
+
curtime = Time.now.utc.to_i.to_s
|
143
|
+
input = @text.length > 20 ? @text[0..10] + @text.length.to_s + @text[-10..-1] : @text
|
144
|
+
params = {
|
145
|
+
q: @text,
|
146
|
+
from: @from,
|
147
|
+
to: @to,
|
148
|
+
appKey: @appkey,
|
149
|
+
salt: salt,
|
150
|
+
sign: Digest::SHA256.hexdigest(@appkey + input + salt + curtime + @appscr),
|
151
|
+
signType: @sign_type,
|
152
|
+
curtime: curtime,
|
153
|
+
strict: !@auto
|
154
|
+
}
|
155
|
+
JSON.parse Net::HTTP.post_form(URI(@url), params).body
|
34
156
|
end
|
35
157
|
|
36
|
-
def
|
37
|
-
return
|
38
|
-
res = translate_parsed(q, from, to)
|
39
|
-
begin
|
40
|
-
@dict_w_buffer[q] = res['translation'][0]
|
41
|
-
rescue => exception
|
42
|
-
puts "havn't result for #{q}"
|
43
|
-
puts res.to_json if @debug
|
44
|
-
end
|
45
|
-
end
|
158
|
+
def run
|
159
|
+
return to_result if @detail
|
46
160
|
|
47
|
-
|
48
|
-
return @dict_s_buffer[q] if !@dict_s_buffer[q].nil?
|
49
|
-
res = translate_parsed(q, from, to)
|
50
|
-
begin
|
51
|
-
@dict_s_buffer[q] = res['web']
|
52
|
-
rescue => exception
|
53
|
-
puts "havn't result for #{q}"
|
54
|
-
puts res.to_json if @debug
|
55
|
-
end
|
161
|
+
to_result['translation'][0]
|
56
162
|
end
|
57
163
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
end
|
164
|
+
def command(args)
|
165
|
+
OptionParser.new do |parser|
|
166
|
+
parser.banner = "用法: llm_translator [options]"
|
167
|
+
parser.separator ""
|
168
|
+
parser.separator "指定选项:"
|
65
169
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
@salt=SecureRandom::uuid
|
73
|
-
params = {
|
74
|
-
q: @q,
|
75
|
-
from: @from,
|
76
|
-
to: @to,
|
77
|
-
appKey: @appkey,
|
78
|
-
salt: @salt,
|
79
|
-
sign: LlmTranslator::sign(@appkey, @appscr, LlmTranslator::input(q), @curtime, @salt),
|
80
|
-
signType: @sign_type,
|
81
|
-
curtime: @curtime
|
82
|
-
}
|
83
|
-
@uri = URI(T_URL_PATH)
|
84
|
-
res = Net::HTTP.post_form(@uri, params)
|
85
|
-
res.body if res.is_a?(Net::HTTPSuccess)
|
86
|
-
end
|
170
|
+
parser.on('-d', '--detail', '显示详细翻译结果,默认false') do
|
171
|
+
self.detail = true
|
172
|
+
end
|
173
|
+
parser.on('-a', '--auto', '严格按照指定from和to进行,默认false') do
|
174
|
+
self.auto = true
|
175
|
+
end
|
87
176
|
|
88
|
-
|
89
|
-
|
90
|
-
|
177
|
+
parser.on('-i TEXT', '--input=TEXT', '待翻译文本, 必填项') do |text|
|
178
|
+
self.text = text
|
179
|
+
end
|
180
|
+
parser.on('-f FROM', '--from=FROM', '源语言') do |from|
|
181
|
+
self.from = from
|
182
|
+
end
|
183
|
+
parser.on('-t TO', '--to=TO', '目标语言') do |to|
|
184
|
+
self.to = to
|
185
|
+
end
|
91
186
|
|
92
|
-
|
93
|
-
|
94
|
-
|
187
|
+
parser.separator ""
|
188
|
+
parser.separator "通用选项:"
|
189
|
+
parser.on_tail("-h", "--help", "帮助信息") do
|
190
|
+
puts parser
|
191
|
+
exit
|
192
|
+
end
|
193
|
+
parser.on_tail("--lang", "语言编码信息") do
|
194
|
+
puts LANG_CODE
|
195
|
+
exit
|
196
|
+
end
|
197
|
+
parser.on_tail("--version", "版本信息") do
|
198
|
+
puts '0.0.1'
|
199
|
+
exit
|
200
|
+
end
|
95
201
|
|
96
|
-
|
97
|
-
def auto_from_to(q)
|
98
|
-
if q.match?ZH_REGEX
|
99
|
-
@from = ZH_SYMBOL
|
100
|
-
@to = EN_SYMBOL
|
101
|
-
else
|
102
|
-
@from = EN_SYMBOL
|
103
|
-
@to = ZH_SYMBOL
|
104
|
-
end
|
105
|
-
end
|
202
|
+
end.parse!(args)
|
106
203
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
204
|
+
if self.text.nil?
|
205
|
+
puts '请输入文本'
|
206
|
+
puts '-i, --input=TEXT 待翻译文本, 必填项'
|
207
|
+
exit
|
208
|
+
end
|
112
209
|
|
113
|
-
|
114
|
-
s.split(' ').map {|w| w.downcase}.join('_')
|
210
|
+
run
|
115
211
|
end
|
116
|
-
end
|
212
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: llm_translator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Liuliming
|
@@ -39,7 +39,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
requirements: []
|
42
|
-
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 2.7.6.2
|
43
44
|
signing_key:
|
44
45
|
specification_version: 4
|
45
46
|
summary: a simple translator!
|