henomoto commited on
Commit
be9b330
·
verified ·
1 Parent(s): 80c52d8

Deploy frontend

Browse files
Files changed (3) hide show
  1. README.md +2 -2
  2. app.py +26 -20
  3. requirements.txt +1 -0
README.md CHANGED
@@ -1,6 +1,6 @@
1
  ---
2
- title: Parayomi ふりがな
3
- emoji: 🦜📖
4
  colorFrom: green
5
  colorTo: red
6
  sdk: gradio
 
1
  ---
2
+ title: Parayomi ふりがな予測デル
3
+ emoji: 📖
4
  colorFrom: green
5
  colorTo: red
6
  sdk: gradio
app.py CHANGED
@@ -12,6 +12,7 @@ from __future__ import annotations
12
  import os
13
 
14
  import gradio as gr
 
15
  from gradio_client import Client
16
 
17
  # ---------------------------------------------------------------------------
@@ -24,13 +25,14 @@ DEFAULT_TEXT = "深夜の路地は人気が無くて怖い。"
24
 
25
  EXAMPLES = [
26
  DEFAULT_TEXT,
27
- "報告が半月も遅れたことで、取り返しつかない大事になった。",
28
- "綺麗半月の絵だけど、これは何で色を塗ったの?",
29
- "綺麗半月の絵だけど、これ金色を塗ったの?",
 
 
30
  "金の時計を買うために、一生懸命に金を貯めた。",
31
  "あちらの方がお見えになった理由は、皆まで言わずとも分かる。",
32
  "天気いいし、皆で表に出て遊ぼ?",
33
- "この表の右上の角に、通し番号を記入してください。",
34
  "カブトムシの立派な角に止まった小さな虫を、指で軽く弾く。",
35
  "ギターを弾く銀髪の彼は何人だ?",
36
  "この美しい紅葉の絶景を独り占めすることなど、何人たりとも許されない。",
@@ -46,7 +48,10 @@ def _segments_to_ruby(segments: list[dict]) -> str:
46
  """Convert segment dicts to HTML with ruby annotations."""
47
  parts: list[str] = []
48
  for seg in segments:
49
- if seg["surface"] == seg["yomi"]:
 
 
 
50
  parts.append(seg["surface"])
51
  else:
52
  parts.append(
@@ -63,12 +68,12 @@ CARD_CSS = """\
63
  .result-container {
64
  display: flex;
65
  flex-direction: column;
66
- gap: 12px;
67
  }
68
  .result-card {
69
  border: 1px solid var(--border-color-primary);
70
  border-radius: 12px;
71
- padding: 16px 20px;
72
  background: var(--background-fill-primary);
73
  transition: box-shadow 0.2s;
74
  }
@@ -106,13 +111,13 @@ CARD_CSS = """\
106
  text-align: right;
107
  }
108
  .ruby-text {
109
- font-size: 2.0em;
110
  line-height: 2.2;
111
  letter-spacing: 0.02em;
112
  color: var(--body-text-color);
113
  }
114
  .ruby-text rt {
115
- font-size: 0.7em;
116
  color: var(--color-accent);
117
  }
118
  .result-card:not(:first-child) .ruby-text {
@@ -184,7 +189,11 @@ def build_result_html(data: dict) -> str:
184
  pyopenjtalk_segments = data.get("pyopenjtalk_segments", [])
185
 
186
  if fugashi_segments or pyopenjtalk_segments:
187
- baselines = '<div class="baseline-row">'
 
 
 
 
188
  if fugashi_segments:
189
  fugashi_ruby = _segments_to_ruby(fugashi_segments)
190
  baselines += f"""\
@@ -217,10 +226,10 @@ def build_result_html(data: dict) -> str:
217
 
218
  TITLE_HTML = """\
219
  <h1 style="text-align:center;margin-bottom:4px;">
220
- <ruby>Parayomi<rp>(</rp><rt>ぱらよみ</rt><rp>)</rp></ruby> ふりがな
221
  </h1>
222
- <p style="text-align:center;color:var(--body-text-color-subdued);margin-top:0;">
223
- 日本語の漢字仮名混じり文を入力すると、文脈から判断した自然な読みを推定します。
224
  </p>
225
  """
226
 
@@ -232,10 +241,7 @@ def get_client() -> Client:
232
  global backend_client
233
  if backend_client is None:
234
  if not backend_space:
235
- raise gr.Error(
236
- "BACKEND_SPACE env var is not set. "
237
- "Set it to the HF Space name (e.g. 'user/parayomi-backend')."
238
- )
239
  backend_client = Client(backend_space)
240
  return backend_client
241
 
@@ -252,13 +258,13 @@ def process(text: str) -> str:
252
  # Define textbox outside Blocks so gr.Examples can reference it above
253
  text_input = gr.Textbox(
254
  label="日本語テキスト",
255
- lines=2,
256
  value=DEFAULT_TEXT,
257
  max_length=100,
258
  )
259
 
260
  with gr.Blocks(
261
- title="Parayomi ふりがなモ",
262
  theme=gr.themes.Ocean(),
263
  ) as demo:
264
  gr.HTML(TITLE_HTML)
@@ -274,7 +280,7 @@ with gr.Blocks(
274
  text_input.render()
275
 
276
  with gr.Row():
277
- submit_btn = gr.Button("変換", variant="primary")
278
 
279
  output_html = gr.HTML(label="結果")
280
 
 
12
  import os
13
 
14
  import gradio as gr
15
+ import jaconv
16
  from gradio_client import Client
17
 
18
  # ---------------------------------------------------------------------------
 
25
 
26
  EXAMPLES = [
27
  DEFAULT_TEXT,
28
+ "人気絶えない観光地だが、一本裏道入ると急に人気がくなる。",
29
+ "大事にる前に話し合うべき",
30
+ "歌が上手彼女、交渉事も常に一枚上手であり、舞台の上手で堂々と振る舞った",
31
+ "綺麗な絵だけど、これは何で色を塗ったの?",
32
+ "綺麗な絵だけど、これは何で金色を塗ったの?",
33
  "金の時計を買うために、一生懸命に金を貯めた。",
34
  "あちらの方がお見えになった理由は、皆まで言わずとも分かる。",
35
  "天気いいし、皆で表に出て遊ぼ?",
 
36
  "カブトムシの立派な角に止まった小さな虫を、指で軽く弾く。",
37
  "ギターを弾く銀髪の彼は何人だ?",
38
  "この美しい紅葉の絶景を独り占めすることなど、何人たりとも許されない。",
 
48
  """Convert segment dicts to HTML with ruby annotations."""
49
  parts: list[str] = []
50
  for seg in segments:
51
+ if (
52
+ seg["surface"] == seg["yomi"]
53
+ or jaconv.kata2hira(seg["surface"]) == seg["yomi"]
54
+ ):
55
  parts.append(seg["surface"])
56
  else:
57
  parts.append(
 
68
  .result-container {
69
  display: flex;
70
  flex-direction: column;
71
+ gap: 8px;
72
  }
73
  .result-card {
74
  border: 1px solid var(--border-color-primary);
75
  border-radius: 12px;
76
+ padding: 12px 16px;
77
  background: var(--background-fill-primary);
78
  transition: box-shadow 0.2s;
79
  }
 
111
  text-align: right;
112
  }
113
  .ruby-text {
114
+ font-size: 1.5em;
115
  line-height: 2.2;
116
  letter-spacing: 0.02em;
117
  color: var(--body-text-color);
118
  }
119
  .ruby-text rt {
120
+ font-size: 0.8em;
121
  color: var(--color-accent);
122
  }
123
  .result-card:not(:first-child) .ruby-text {
 
189
  pyopenjtalk_segments = data.get("pyopenjtalk_segments", [])
190
 
191
  if fugashi_segments or pyopenjtalk_segments:
192
+ baselines = (
193
+ '<p style="font-size:0.9em;color:var(--body-text-color-subdued);margin:0 0 8px;">'
194
+ "既存の2つの形態素解析器による読み推定の結果:</p>"
195
+ '<div class="baseline-row">'
196
+ )
197
  if fugashi_segments:
198
  fugashi_ruby = _segments_to_ruby(fugashi_segments)
199
  baselines += f"""\
 
226
 
227
  TITLE_HTML = """\
228
  <h1 style="text-align:center;margin-bottom:4px;">
229
+ <ruby>Parayomi<rp>(</rp><rt>ぱらよみ</rt><rp>)</rp></ruby> ふりがな予測デル
230
  </h1>
231
+ <p style="text-align:center;margin-top:0;">
232
+ 日本語の漢字仮名混じり文を入力すると、Parayomiモデルが文脈を考慮した自然な読みを予測します。
233
  </p>
234
  """
235
 
 
241
  global backend_client
242
  if backend_client is None:
243
  if not backend_space:
244
+ raise gr.Error("BACKEND_SPACE env var is not set. ")
 
 
 
245
  backend_client = Client(backend_space)
246
  return backend_client
247
 
 
258
  # Define textbox outside Blocks so gr.Examples can reference it above
259
  text_input = gr.Textbox(
260
  label="日本語テキスト",
261
+ lines=1,
262
  value=DEFAULT_TEXT,
263
  max_length=100,
264
  )
265
 
266
  with gr.Blocks(
267
+ title="Parayomi ふりがな予測デル",
268
  theme=gr.themes.Ocean(),
269
  ) as demo:
270
  gr.HTML(TITLE_HTML)
 
280
  text_input.render()
281
 
282
  with gr.Row():
283
+ submit_btn = gr.Button("予測", variant="primary")
284
 
285
  output_html = gr.HTML(label="結果")
286
 
requirements.txt CHANGED
@@ -1,2 +1,3 @@
1
  gradio>=5.0.0
2
  gradio_client>=1.0.0
 
 
1
  gradio>=5.0.0
2
  gradio_client>=1.0.0
3
+ jaconv