freemt commited on
Commit
7b6ee4d
·
1 Parent(s): 5c14bf0

Update hf model model_s

Browse files
Files changed (49) hide show
  1. data/catcher-in-the-rye-boll-de.txt +0 -0
  2. data/catcher-in-the-rye-shixianrong-zh.txt +0 -0
  3. data/demian-hesse-de.txt +0 -0
  4. data/demian-hesse-en.txt +0 -0
  5. data/test-zh-ja.txt +217 -0
  6. data/英译中国现代散文选1(汉外对照丛书).txt +0 -0
  7. docs/source/intro.rst +2 -2
  8. img/plt.png +0 -0
  9. radiobee/__main__.py +55 -7
  10. radiobee/align_sents.py +4 -2
  11. radiobee/align_texts.py +2 -0
  12. radiobee/amend_avec.py +1 -1
  13. radiobee/app.py +2 -0
  14. radiobee/cmat2tset.py +2 -0
  15. radiobee/docterm_scores.py +7 -5
  16. radiobee/en2zh.py +6 -1
  17. radiobee/error_msg.py +2 -0
  18. radiobee/files2df.py +2 -0
  19. radiobee/gen_aset.py +2 -0
  20. radiobee/gen_eps_minsamples.py +7 -4
  21. radiobee/gen_model.py +5 -6
  22. radiobee/gen_pset.py +7 -2
  23. radiobee/gen_row_alignment.py +1 -1
  24. radiobee/gen_vector.py +2 -2
  25. radiobee/gradiobee.py +41 -17
  26. radiobee/interpolate_pset.py +1 -0
  27. radiobee/lists2cmat.py +22 -1
  28. radiobee/loadtext.py +13 -14
  29. radiobee/mdx_e2c.py +1 -0
  30. radiobee/model_s.py +37 -0
  31. radiobee/paras2sents.py +110 -0
  32. radiobee/plot_cmat.py +4 -3
  33. radiobee/plot_df.py +2 -1
  34. radiobee/process_upload.py +3 -2
  35. radiobee/seg_text.py +2 -0
  36. radiobee/shuffle_sents.py +44 -15
  37. radiobee/smatrix.py +8 -5
  38. radiobee/text2lists.py +2 -1
  39. requirements.in +0 -0
  40. requirements.txt +4 -1
  41. rsyn-to-radiobee-aligner.bat +1 -0
  42. run-pydocstyle.bat +1 -0
  43. run-pylint.bat +1 -0
  44. tests/test_align_sents.py +60 -2
  45. tests/test_lists2cmat_hlm.py +45 -0
  46. tests/test_paras2sents.py +34 -0
  47. tests/test_shuffle_sents.py +136 -0
  48. tests/test_text2lists.py +10 -9
  49. tests/test_text2lists_bug2.py +5 -7
data/catcher-in-the-rye-boll-de.txt ADDED
The diff for this file is too large to render. See raw diff
 
data/catcher-in-the-rye-shixianrong-zh.txt ADDED
The diff for this file is too large to render. See raw diff
 
data/demian-hesse-de.txt ADDED
The diff for this file is too large to render. See raw diff
 
data/demian-hesse-en.txt ADDED
The diff for this file is too large to render. See raw diff
 
data/test-zh-ja.txt ADDED
@@ -0,0 +1,217 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ https://yizhiyoudao.kuaizhan.com/1/36/p792963387eba1d
2
+ 李克强2021年两会记者会实录【中日】
3
+ 2021-03-12
4
+ 译之有道第1413期
5
+ 小编按:2021年3月11日,十三届全国人大四次会议在北京举行记者会,国务院总理李克强应邀出席并回答中外记者提问。记者会实录中日文对照如下:
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+ 李克强总理出席记者会并回答中外记者提问
14
+
15
+ 李克強総理による内外記者会見
16
+
17
+
18
+
19
+   美国消费者新闻与商业频道记者:李总理,新冠肺炎疫情对许多工作完成的方式和地点都产生了影响,疫情暴发一年了,请问中国就业质量和收入有什么明显的变化,中方将采取什么具体的措施改善这种状况?特别是在人口老龄化背景下,对消费需求特别是国外品牌消费有什么影响?
20
+
21
+   CNBC記者: 新型コロナウイルス感染症は働き方と職場に影響を与えました。感染症が発生してからすでに1年が経ちましたが、中国における雇用の質と所得に何か顕著な変化がありますか。この現状を改善するために、中国はこれからどのような具体的な措置を取るのでしょうか。特に、高齢化社会の背景の下、消費の需要特に海外ブランドに関する消費にどのような影響があるのでしょうか。
22
+
23
+   李克强:就业对一个国家、对一个家庭可以说都是天大的事。去年在疫情肆虐的时候,很多街面上都见不到行人了,多数店铺都关了,当时我们最担心的就是出现大规模的失业。记得后来我到地方考察,看了不少店铺。在一个小店,店主跟我说,3个月没有营业了,因为政府减免税费,支持减免房租、水电费,稳岗补贴资金到位,我们没有裁员,挺过来了。我问员工的工资怎么办?他说当时只发生活费了。在场的20多位员工都说,店里管吃管住,不让我们下岗,还有什么说的。企业和员工都明白,只要保住了企业、稳住了岗位,一复工复市,生意就会旺起来。
24
+
25
+   李克強: 雇用は国、または家庭にとって非常に大事なことであります。去年、新型コロナウイルス感染症が猛威をふるっている中、街中に人影もなく、大多数の店舗が閉まってしまいました。当時、我々が最も心配していたのは大規模な失業が現れることです。私が地方を視察した際、いくつかの店鋪を訪れました。ある小さな店鋪の店主は「三ヶ月も営業していないが、政府の減税・料金引き下げ、家賃、水道料金、電気代の減免、雇用安定による確実な補助金交付のおかげで、解雇をせずに困難を乗り越えました。」と言いました。従業員たちの給料について聞くと、生活費しか払っていなかったと言いましたが、その場にいた20名余の従業員たちは、店のほうが住所と食事を保障し、解雇されることがなかったので、文句をいう筋合いはないと言いました。企業も従業員たちも、企業さえ守れば、ポストさえキープすれば、操業・生産再開の日を迎えたら必ずまた繁盛になると分かっています。
26
+
27
+   去年我们在制定宏观政策的时候,因为不确定因素太多,没有制定经济增长的预期目标。但是反复权衡,还是制定了就业目标,也就是城镇新增就业900万人以上。因为就业是民生之本,是发展之基,也是财富创造的源头活水。当时我们也提出,要努力实现全年经济正增长,实际上是相信只要能够实现900万人以上的城镇新增就业,就有经济的正增长,因为有就业就有收入,就可以带动消费、拉动经济。
28
+
29
+   去年、我々がマクロ政策を策定するときに、不確実な要素が多すぎるため、経済成長の所期目標を策定しませんでした。しかし、考えを積み重ねた結果、雇用目標を策定し、都市部新規就業者数を900万人以上達成させるとの考えでした。雇用は民生の元、発展の礎、富を創造する源であるからです。当時我々は年間経済のプラス成長を努力して実現させると表明したのも、900万人以上の都市部新規就業者の目標さえ実現できれば、経済のプラス成長は実現できると信じているからです。雇用があれば収入があり、消費と経済の引き上げにつながります。
30
+
31
+   去年,在以习近平同志为核心的党中央坚强领导下,经过全国上下共同努力,我们的市场主体表现出坚强的韧性,广大人民共克时艰,最后实现了城镇新增就业1186万人,全年经济增长2.3%,居民收入相应增长,都好于预期。
32
+
33
+   去年、習近平同志を核心とする党中央の力強い指導のもと、全国の共同な努力によ���、我が国の市場主体は高い強靭性を示し、広範な人民大衆が共に困難な時局を乗り越え、都市部新規就業者1186万人、経済年間成長率2.3%を実現し、住民収入もそれなりに増加し、いずれも予期を上回りました。
34
+
35
+   今年我们的就业压力仍然很大,城镇新增劳动力约1400万人,其中高校毕业生909万人,创历史新高,还要保障退役军人就业,还要为两亿七八千万农民工提供打工的机会。所以今年我们在制定宏观政策的时候,依然坚持就业优先的政策,我们继续推动“六稳”、落实“六保”,还是把就业放在首位。去年出台的有关就业的政策举措,不仅没有调退,还有所增加,其他政策都要有利于就业。我们相信,通过经济稳定恢复增长,会带动更多的就业岗位,而更多的就业岗位会推动经济稳中向好。
36
+
37
+   今年の雇用情勢も依然として厳しいです。都市部新規増加労働者数は約1400万人、そのうち、高校卒業者909万人あり、史上最高となりました。しかも退役軍人の就職も保証すべきであり、2億七八千万の農民工に仕事の機会を提供しなければなりません。そのため、我々は今年、マクロ政策を策定する際に、依然として雇用優先政策を堅持し、引き続き「六つの安定」を推進し、「六つの保障」を実行に移し、雇用を第一位とします。去年打ち出された雇用に関する政策措置も撤回しないどころか、また増やしていきます。ほかの政策も雇用に有利なものにならなければなりません。我々は、経済の安定と回復を通じて、雇用機会を増やすことができ、そして、より多くの雇用機会も経済が安定を保ちつつ良い方向に向かわせることができると確信しています。
38
+
39
+   今年我们确定新增城镇就业的目标是1100万人以上,希望在实际执行中还可以更高一点。我们也很明确,就业还是要让市场来唱主角,也就是继续通过保市场主体来保就业。一方面推动稳岗增岗,另一方面拓展就业渠道。去年疫情中就业方式也有新变化,像我们这几年发展的新动能,包括网购、快递等逆势快速增长,也带动了就业和传统产业发展。我们一方面要继续鼓励增加相对稳定的就业岗位,也要广开灵活就业的渠道。现在中国的灵活就业正在兴起,已经涉及到两亿多人。有的一人打几份工,很辛苦,所以我们应该给他社保补贴,特别是要用机制性的办法来解决可能出现的职业伤害问题,给他们提供基本的权益保障。这也有利于灵活就业市场更加健康、稳定地向前发展。
40
+
41
+   今年は都市部新規就業者数の目標をを1100万人以上にしましたが、実際の実行プロセスにおいて、これを上回ることを希望します。雇用については市場を主役にし、即ち引き続き市場の主体的地位の確保を通じて雇用を保障することも明確であります。雇用の安定と増加を推進する一方、就業ルートを広げます。去年感染症の背景のもと、就業方式に新たな変化が生み出されました。近年発展してきた新たな原動力、例えばオンライン・ショッピング、宅配便などは逆境を乗り越えて高速な発展を遂げ、雇用と伝統産業の発展を牽引しました。我々は相対的に安定な雇用を増加することを奨励するとともに、フレキシブルな雇用ルートを広く開拓します。中国は今、フレキシブルな就業が新興し、既に二億余りの人たちに影響を与えています。一人でいつくかのバイトをする方もいます。それは大変なことなので、我々は彼に社会保険補助金を支給すべきです。特に、メカニズムの面で潜在的な労働災害問題を解決し、彼らに基本的な権益保障を与える必要があります。これも、フレキシブルな雇用市場のより健全、安定な発展に有利であります。
42
+
43
+   至于刚才记者朋友提到的老年人问题,中国老龄人口已经有两亿六千万,老龄产业也可以说是一个巨大的朝阳产业,它带来了多样化的需求。正因为中国市场多层次、多样化的需求,这样一个广大的市场也必然会给外国企业的产品、服务乃至于投资创造更多机会,因为我们的市场是开放的。
44
+
45
+   先程記者の方が言及した高齢者問題について、中国の高齢者人口は既に2億6千万人に達し、シルバー産業は巨大な新興産業と言っても過言ではなく、多様なニーズをもたらしました。中国市場において多層的、多様なニーズがあるため、このような広大な市場は必ず海外企業の製��、サービスや投資にさらなるチャンスを創り出していきます。我々の市場は開放的なものです。
46
+
47
+   中国有14亿人口,劳动力资源可以说是最丰富的资源,中国人民又能够吃苦耐劳,只要有就业门路就会多挣。“民生在勤,勤则不匮”。我相信中国人民会用自己勤劳的双手,来逐步迈向共同富裕。
48
+
49
+   中国は14億の人口を有し、労働力資源は最も豊富な資源と言ってもいいです。中国人民は苦労に耐え勤勉であり、就業の道さえあれば多く稼ぎます。「人生は勤むるに在り、勤むるときは則ち乏しからず」。中国人民は自らの勤勉な両手で次第に共同富裕へ邁進していくと信じています。
50
+
51
+   西班牙埃菲社记者:美方指责中方对上月到访武汉的世界卫生组织专家组缺乏透明度,专家组组长指出中方同事分享了大量工作细节,同时也表示专家组希望获得在2019年10月至12月之间与新冠肺炎疫情相似疾病病例的更多原始数据,中方是否愿提供这些数据,或者是否愿再次接待专家组访华?
52
+
53
+   スペインEFE通信社記者: 米国は、中国が先月武漢を訪れた世界保健機関(WHO)の専門家チームに対して透明性が欠如していると非難しています。専門家チームの団長は、中国の同僚が数多くの仕事の詳細を共有したと表明し、同時に専門家チームから2019年10月から12月までの新型コロナウイルス感染症に類似する疾病のケースに関するより多くのローデータ獲得への希望を表明しました。中国はこれらのデータを提供する用意がありますか。また、再び専門家チームの訪中を接待する用意がありますか。
54
+
55
+   李克强:新冠肺炎疫情是一起突发的全球公共卫生事件,中方和各方一样都希望能够尽快查清病毒是从哪里来的,这样有利于切断传播的渠道,更好更有效地来防控疫情。但疫情溯源的确是一个复杂的科学问题,需要各国加强合作,持续研究。中方本着实事求是、公开透明、开放合作的原则和态度,同世卫组织保持沟通,也支持世卫组织专家在华开展溯源研究工作。下一步我们还愿意继续同世卫组织一道,推动科学溯源工作。
56
+
57
+   李克強: 新型コロナウイルス感染症は突如発生したグローバルな公衆衛生事件です。中国は各国と同様に、できるだけ早くウイルスがどこから来たのかを究明することを望んでいます。これは感染経路の遮断、効果的な感染症予防·抑制に有利であります。しかし、ウイルス起源追跡は確かに複雑な科学問題であり、各国の協力強化、持続研究が求められます。中国は、実事求是(事実に基づいて真実を求める)、オープンかつ透明、そして開放協力な原則と態度に則り、WHOとの意思疎通を保ち、WHOの専門家が中国でウイルス起源追跡研究を実施することをサポートします。これから我々は引き続きWHOと共に、科学的なウイルス起源追跡を推進する用意があります。
58
+
59
+   当前疫情还在全球蔓延,当务之急不仅要溯源,还要做好各种防控工作,包括接种疫苗等。新冠病毒是人类共同的敌人,我们希望各方携起手来,因为在这样一个人类共同的敌人面前,没有哪个国家能够独善其身。我们也坚信人类有能力最终战胜这个病魔,我也希望明年我们能够面对面进行交流。
60
+
61
+   現在、新型コロナウイルス感染症は依然として世界中で蔓延しています。当面の急務は、ウイルス起源追跡だけでなく、ワクチン接種を含む様々な予防·抑制の仕事をきちんとすることです。新型コロナウイルス感染症は人類の共同の敵であり、我々は、世界各国が手を携えることを希望しています。このような人類共通の敵の前に、どの国も独善することができないからです。我々は、人類はこの病魔に打ち勝つ能力があると確信し、来年皆さんと顔を合わせて交流できることを希望します。
62
+
63
+   日本经济新闻记者:您在政府工作报告中提出2021年国内生产总值增长目标为6%以上,目前很多国际机构都认为中国2021年经济增长有可能达到8%左右。在“十四五”开局之年,除了固定资产投资规模加大,还存在着由于世界性的资金过剩导致房地产投资过热的风险,现在中国政府采取了宽松的财政和货币政策。请问总理,在这样的情况下今年是否存在宏观政策转为偏紧的可能性?据日本经济研究中心预测,中国的经济规模将于2028年超过美国,对此您有何看法?
64
+
65
+   日本経済新聞記者:李総理は政府活動報告で2021年の国内総生産(GDP)の成長率目標を6%に設定したと発表しましたが、当面複数の国際機構は中国2021年の経済成長を8%だと予測をしています。第十四次5カ年計画の開局の年において、固定資産投資規模の拡大のほかに、世界的な資金の過剰による不動産投資の過熱気味といったリスクに対し、中国政府はいま緩和的な財政、貨幣政策を実施しています。今の状況では、中国のマクロ政策が引き締めに転換する可能性はありますか。また、日本経済研究センターが中国のGDPは2028年にアメリカを超えることを予測したことに対していかがお考えでしょうか。
66
+
67
+   李克强:我注意到,我们提出6%以上的经济增长预期目标,确实引起了多方面的关注,有不少分析。有的认为是积极的,也有的认为低于预期。我们当然乐见经济向好,但是也清醒地看到,今年是在恢复性增长的基础上前行,有很多不可比的因素,而且世界经济复苏不确定性依然很大。我们说增长6%以上,6%不低了,现在我们的经济总量达到100万亿元,增长6%就是6万亿元,这要放到“十三五”之初,需要8%以上增速才能达到。而且我们说增长6%以上是开了口子的,实际过程中也可能会增长得更高一点。但是我们不是在定计划,是引导预期,希望把预期引导到巩固经济恢复增长基础,推动高质量发展,保持可持续性,尤其是和明年、后年的目标相衔接,不能造成大起大落,否则会扰乱市场的预期。一时走得快不一定走得稳,只有走得稳才能走得有力。我们还是希望中国这样一个巨大的经济体,经济能够行稳致远,保持长期向好。
68
+
69
+   李克強: 経済成長の所期目標としてGDP 成長率6%以上を掲げ、多方面からの注目を集め、積極的だとか、予期を下回ったといった分析はありました。我々は経済の向上、改善を歓迎しますが、今年は回復的成長しつつ進展しているため、比較できない要素を多く抱えることを冷静に捉えています。世界経済の景気回復の不確実性が依然として大きいです。6%以上とはいうものの、低い水準ではありません。現在、我々のGDPは100兆人民元に達し、6%の成長となれば6兆元を意味します。この数値は第十三次5カ年計画の初期において8%以上の増速にして可能になるものです。しかも、6%以上という目標は上限が開けられたものです。実際の成長はより高いかもしれませんが、我々は計画を立てるわけではなく、市場の予期を導く考えです。予期を経済回復と成長の基礎を打ち固めることに導いて、質の高い発展を推し進め、持続可能性を保ち、特に来年と再来年の目標との整合性を重視し、急増、急落を回避すべきです。さもなければ市場の予期を乱してしまいます。一時的な急増は安定しているとは言えず、安定した成長こそ力強い発展だと言えます。巨大な経済体である中国の経済の持続的健全な発展と長期的好調を保つことを希望します。
70
+
71
+   去年面对罕见的巨大冲击,我们及时果断采取措施,但也保持定力,没有搞“大水漫灌”。我们新增财政资金规模2万亿元,绝大部分都是用于市场主体和民生急需,主要是减税降费、保基本民生,而且采取了直达机制,就是把这些“救命钱”最快7天时间直达基层,来保证基层减税降费、稳岗等财力,很快就见到效果。如果我们当时重点考虑上大项目、搞大产业,这不是不需要,但这要经过论证还要考虑市场需求,时间恐怕得200天以上,就不是仅仅一周时间了。错过了时间,企业可能会大批倒闭。我记得去年在记者会上,也有记者提出中国政府采取的政策规模和力度是不是偏小了。我们是把“肥”施到根子上,政策打到点子上,所以起效快、有作用。现在看,这个规模、力度是合理的,准备的储备政策后来也没有用。
72
+
73
+   去年、まれに見る大きなショックに直面し、われわれはいち早く果敢に立ち向かいながらも、不動心を保ち、「ばらまき」型の刺激策を取りませんでした。中央財政資金新規増加分2兆元の大部分は市場主体の緊急需要と民生問題の解決に投入し、減税、料金の引き下げと基本民生の保障が主の内容でした。更に直接交付の仕組みを確立し、最短七日間に「救命金」を末端まで到達させ、減税、料金の引き下げ、就業支援などの財的保障を提供して、短時間で効果を得ました。もしその時、われわれは大きなプロジェクト、���るいは大きな産業の発起を力点に置くと、必要性はあるものの、論証や市場需要の検討に一週間ではなく200日以上の時間がかかってしまいます。時機を逃すと、大規模な破綻になるかもしれません。去年の記者会見で、中国政府が実施した政策の規模と水準が足りないという意見がありましたが、われわれは「根元までの肥料やり」と、政策を的確なところに実施したからこそ、効果が短時間かつ顕著に得られました。今から振り返ると、当時の規模と水準は適切だと言えます。準備した代替策も使いませんでした。
74
+
75
+   去年我们没有搞宽松政策,或者说所谓量化宽松,今年也就没有必要“急转弯”,还是要保持政策的连续性和可持续性,着力稳固经济,推动向好。保持经济运行在合理区间,还是要注重把“肥”施在根上,现在市场主体特别是中小微企业还在恢复元气中。由于经济恢复增长,我们要合理调整政策,但调整是适度的,有些阶段性政策退了,同时又用一些结构性减税降费政策来冲抵影响,保持保就业、保民生、保市场主体的力度不减。
76
+
77
+   去年、われわれは緩和政策、または量的緩和を取りませんでした。故に今年も政策の「急転換」をする必要はなく、マクロ政策の継続性、安定性、持続可能性を保ち、経済の向上と基盤の固めることに取り組むべきです。また、現在中小・零細企業が活力を取り戻している段階にあリ、われわれは経済の動きを合理的な範囲内に保ち、「根元までの肥料やり」を重視するべきです。政策を合理的且つ適度に調整し、一部の段階的な政策を撤廃する一方、構造的な減税、料金の引き下げ政策で影響をかき消すように、民生、雇用、市場主体の保障の水準を維持します。
78
+
79
+   怎样保持力度不减?资金规模固然很重要,但用好钱更重要,我们去年宏观调控积累的经验还可以继续用。比如在财政金融方面,简单地说,就是要“一减、一增、一稳中有降”。“一减”,就是减少中央政府本级支出,各级政府都要带头过紧日子;“一增”,就是扩大直达资金范围,让基层和市场主体感到政策支持力度不减,这样能够更快更有效地惠企利民;“一稳中有降”,就是在稳定杠杆率的同时,引导金融企业合理让利,使中小微企业融资更便利、融资成本稳中有降。当然,我们对各类风险隐患,也会及时防范化解。
80
+
81
+   保障の水準を維持するには、資金の規模より運用が重要であり、去年のマクロコントロールの経験は役に立ちます。例えば、財政金融面では、簡単に言うと「一つの削減」「一つの拡大」「一つの安定を保ちながらへらす」であります。「一つの削減」とは、中央政府が本級財政支出を削減し、各級政府が率先して支出を切り詰めることです。「一つの拡大」とは、資金の直接交付範囲を拡大し、末端と市場主体に支援水準の継続を実感させ、迅速且つ効果的に企業と大衆に利益をもたらすことです。「一つの安定を保ちながらへらす」とはレバレッジ率を安定させる中で、金融企業の合理的な利益還元を導き、中小・零細企業の融資の円滑化、融資コストが安定の中で下がるようにすることです。もちろん、我々は各種のリスクを適時に防止、対処していきます。
82
+
83
+   中国发展的根本目的是要让中国人民过上好日子,中国还是一个发展中国家,实现现代化还有很长的路要走。我们会立足于着力办好自己的事。中国的发展对世界和平稳定、繁荣发展都是重要贡献。
84
+
85
+   中国発展の根本的な目的は、中国人民が素晴らしい生活を過ごせるようにすることです。中国はまだ発展途上国であり、現代化の実現までまだ長い道のりがあり、力を入れて自らの発展に専念することに立脚します。中国の発展は世界の平和と安定、発展と繁栄にとっても重要な貢献です。
86
+
87
+   中国新闻社记者:总理您好。前两年住院费用的异地报销问题得到了解决,极大便利了异地就医。但是很多人外出打工,也有不少老年人是异地养老,他们门诊的看病开药还需要回原籍报销,非常不方便,所以请问门诊费用的报销何时能得到解决?
88
+
89
+   中国新聞社記者:総理、こんにちは。二年前、入院費用の他地域における清算が解決され、他地域での受診は便利になりました。しかし、出稼ぎ労働者が多く存在し、他地域で老後を送る年寄りも少なくありません。���らにとって、外来診療費は出身地で清算しなくてはならなく、非常に不便です。そのため、外来診療費の清算はいつ解決できるのでしょうか?
90
+
91
+   李克强:我在中国政府网的实名留言中,也看到了这类问题。的确,在一些学校门口,大家看到很多老人在接送孩子,这些老人不少是异地养老的,或者就是来帮子女带孩子的。他们中有人经常为异地报销医疗费奔波烦恼,这个问题应该下决心逐步解决。今年我们要扩大门诊费用跨省直接报销的范围,到明年年底前每个县都要确定一个定点的医疗机构,能够直接报销包括门诊费在内的医疗费用,不能再让这些老人为此烦心。这件事,还有类似的事,看似不大,政府工作人员多费些心,就可以让老人、让家庭多一点舒心。
92
+
93
+   李克強:中国政府網の実名コメントにおいて、このような問題も見かけました。確かに、一部の学校の外に、子供を送迎する年寄りが多く見えます。これらの年寄りには他地域で老後を送るか、あるいは子供のために孫の世話をする人が少なくありません。常に医療費用の他地域での清算に悩み、駆け回っているお年寄りも存在するため、この問題は決意を持って段階的に解決すべきです。今年、我々は外来診療費の他省での医療保険即時適用の範囲を拡大させ、来年の年末までに、すべての県において指定された医療機構を確定し、外来診療費を含む医療費用の直接清算を実現させ、年寄りがこれ以上このような問題に悩むことをさせません。このこと、そして類似のことは大した問題ではなさそうに見えますが、政府活動に携わる者が更に気を遣えば、年寄りや家族が一層快適に生活できるようになります。
94
+
95
+   凤凰卫视记者:过去一年香港因为疫情饱受打击,未来两年又将进入选举年,此时全国人大会议就完善香港的选举制度作出了决定,人大常委会将就香港选举的相关法律进行修改。外界对于“一国两制”如何继续实践充满关注。您认为“一国两制”在香港将来要如何行稳致远?
96
+
97
+   フェニックステレビ記者:ここ1年、香港は新型コロナウイルス感染症で大きなダメージを受けました。これからの二年間、香港は選挙に入る予定で、このタイミングで全人代は香港特別行政区の選挙制度の整備について決定し、全人代の常務委員会は香港の選挙に関する法律を見直します。「一国二制度」がいかに継続的に実行されるかが注目を浴びています。これからいかに香港で「一国二制度」を長期的かつ安定的に実行できると思われますか。
98
+
99
+   李克强:我们明确提出,要继续全面准确地贯彻“一国两制”、“港人治港”、高度自治方针,严格依照宪法和基本法办事,落实好特别行政区维护国家安全的法律制度和执行机制,全力支持特区政府和行政长官依法施政。
100
+
101
+   李克強:我々は「一国二制度」、「香港住民による香港統治」、高度の自治という方針を引き続き全面的かつ正確に貫徹し、厳格に憲法と香港基本法に則って行動し、特別行政区の国家安全維持のための法律・制度とその執行メカニズムを実施し、特別行政区政府と行政長官の法に基づいた施政を全力にサポートすることを明確に提出しました。
102
+
103
+   刚才你问到全国人大就完善香港选举制度作出决定,决定很明确,就是要坚持和完善“一国两制”的制度体系,始终坚持“爱国者治港”,也是为了确保“一国两制”行稳致远。
104
+
105
+   先ほど全人代の香港選挙制度の整備に関する決定について聞きましたが、決定は明確で、「一国二制度」の制度体系を堅持し、より完全なものにすることであり、「愛国者による香港統治」を堅持することも、「一国二制度」の長期的且つ安定的な実行を確保するためのものです。
106
+
107
+   去年香港受到了多重冲击,我们希望香港各界能够携起手来尽早战胜疫情,实现经济恢复性增长,改善民生,保持香港长期繁荣稳定。中央政府会继续全力给予支持。
108
+
109
+   去年、香港は多重の衝撃を受けました。我々は香港の各界の皆さんが手を携えて一刻も早く感染症に打ち勝ち、経済の回復的成長を実現し、民生を改善し、香港の長期的繁栄と安定を保っていくことを希望します。中央政府は引き続き全力でサポートしていきます。
110
+
111
+   中央广播电视总台央视记者:国家提出建设科技强国,但是目前在一些重点领域���关键技术上我们还存在短板,甚至出现了“卡脖子”的情况。与此同时,我们还看到了一些急功近利的现象,比如在一些地区,一些高新产业项目的大规模投入出现了烂尾。请问您如何看待这样的情况?未来政府在推动科技创新方面还会有哪些新的举措?
112
+
113
+   中央人民広播電視総台記者:国は科学技術強国の建設を掲げましたが、現在一部の重点分野と核心技術において短所があり、首が締め付けられるような状況が現れています。それと同時に、急功近利(功を急いで目前の利益を求める)な現象が見られます。 例えば、一部の地区で、新興産業における大規模投入が放置されたことが見られます。これについていかがお考えでしょうか。これから政府が科学技術イノベーション促進においてどのような新たな措置を打ち出しますか。
114
+
115
+   李克强:多年来,我国在科技创新领域有一些重大突破,在应用创新领域发展得也很快,但是在基础研究领域的确存在着不足。要建设科技强国,提升科技创新能力,必须打牢基础研究和应用基础研究这个根基。打多深的基,才能盖多高的楼。不能急功近利,要一步一个脚印地走。
116
+
117
+   李克強:長年にわたって、我が国は科学技術イノベーションにおいて大きなブレークスルーを遂げました。応用イノベーション分野において速やかな発展を遂げたものの、基礎研究分野においては、確かに不足があります。科学技術強国を築き、科学技術イノベーション能力を向上させるために、基礎研究と応用基礎研究の基底を固めなければなりません。基礎が牢固であるほど、建物が高く建てられます。急功近利ではなく、確実に一歩々々歩んで行くべきです。
118
+
119
+   目前我国全社会研发投入占GDP的比重还不高,尤其是基础研究投入只占到研发投入的6%,而发达国家通常是15%到25%。我们下一步要加大基础研究的投入,还要继续改革科技体制,让科研人员有自主权,很重要的是要让科研人员有经费使用的自主权,不能让科研人员把宝贵的精力花在填表、评比等事务上,还是要让他们心无旁骛去搞研究,厚积才能薄发。讲到这里,我想对青年学生们说几句话,不管你们将来从事什么职业、有什么样的志向,一定要注意加强基础知识学习,打牢基本功和培育创新能力是并行不悖的。树高千尺,营养还在根部。把基础打牢了,将来就可以触类旁通,行行都可以写出精彩。
120
+
121
+   現在我が国全社会が研究開発に投入した資金がGDPを占める比率は高くありません。特に基礎研究への投資は、研究開発に投入した資金の6%しか占めていません。先進国は通常15%ー25%となります。これからは基礎研究の資金投入をさらに拡大し、引き続き科学研究の体制改革を推進します。研究員の自主権、特に経費使用自主権を確保します。科学研究者が審査・評価の手続きに力をかけることを避け、安心して科学研究に専念できるようにします。厚く積んだこそ、持続的に発することができます。ここで、青年学生たちに提言します。将来どのような職業に就業しても、どのような志向を持っていても、基礎知識の勉強を固めるべきです。基礎を固めることとイノベーション能力の育成とは同時に進めても矛盾しないことです。高い木であっても、その養分は木の根にあります。基礎をよく固めれば、一を聞いて十を知ることができ、どの業界においても素晴らしい成果を収めることができます。
122
+
123
+   创新还是要依靠市场的力量。企业是创新的主体。“十四五”期间政府会继续加大科技投入,同时要更多地依靠社会力量来加大研发投入,所以我们要增加“全社会”这个口径下的研发投入。这就需要采用一些机制。比如今年我们采取对制造业研发费用投入加计扣除100%的措施,这实际上是一项税收优惠,就是想通过市场化普惠制的办法,使企业投资研发有动力。当然,研发要靠人才,中国的人才资源是丰富的。我们一方面要让领军拔尖人才脱颖而出,另一方面也要看到普通人也有上上智。这些年我们推动“双创”,形成“众创”局面,推动了应用创新,也给整体创新带来了更大空间。
124
+
125
+   イノベーションは市場の力に頼らなければなりません。企業はイノベーションの主体です。第十四次五カ年計画の間、政府は引き続き科学技術への投資を拡大しながら、社会の力に頼って研究開発へ��投入を拡大します。「全社会」という範囲内の研究開発投資を増加させます。そのため、メカニズムの構築が必要です。例えば、今年我々は製造業企業研究開発費用に対して、加算控除比率を100%にまで引き上げ、これは実際に税制優遇の仕組みであります。市場化メカニズムをもって企業の研究開発に原動力を注ぐためであります。もちろん、研究開発に人材が必要です。中国の人材資源は豊かであります。我々は抜群した人材を穎脱させる一方、一般人であっても素晴らしい知恵を持っている人がいることを認識しています。近年、我々は大衆による起業・革新を押し進め、「衆創」局面を成し遂げました。これは応用イノベーションを推進し、全体的なイノベーションにより広い空間をもたらしました。
126
+
127
+   我们说科技要自立自强,科学家要发奋努力,这和国际合作、同行交流是并行不悖的。科学探索和发明发现是需要合作的,需要共同努力。封闭不会有前途,断链对谁都没有好处。中国愿意在保护知识产权的基础上,同各国加强科技领域的合作,共同促进人类文明进步。
128
+
129
+   我々が提唱した科学技術の自立、研究者たちが奮闘することは国際協力、同業者間の交流と並行して矛盾しないことです。科学技術の探索と発明には協力と共同の努力が求められています。閉鎖することは袋小路に向かうだけです。デッカプリングは誰の利益にもなりません。中国は知的財産権を保護する上、各国との科学技術協力を強化し、共に人類文明の進歩を推進する用意があります。
130
+
131
+   美国有线电视新闻网记者:美中两国关系在过去几年跌入建交以来的低谷,中方高层官员多次表示这是由于特朗普政府实施极端错误的反华政策造成的,他们也希望,美国拜登政府可以拨乱反正。但是许多来自华盛顿的声音表示中方的判断和立场忽视了重要的两点:一个就是双边关系恶化是双方的原因,而不是中方常说的责任完全在美方;还有一点就是在对华态度以及重大政策上,无论是疫情溯源还是香港、新疆等问题,美国的民主和共和两党其实有着高度的共识。请问您对这种来自美国的观点有何回应?尤其是在美中两国将于下周在阿拉斯加举行拜登上台之后的首次高级别会谈之际,中方会不会调整或者改变相关政策立场,推动双边关系的重启和修复?
132
+
133
+   CNN記者:米中関係は過去数年で国交樹立以来の谷底に落ち込みました。これがトランプ政府の極めて誤った反中政策が原因だと中国側の高層部が何度も表明しました。彼らはまたバイデン大統領が間違った政策を正すことを希望します。しかしワシントンからは、中国の判断と立場が二つの重要なポイントを無視したとの声があります。第一に、双方関係が悪化したのは双方に原因があり、中国が常に言うように責任が完全にアメリカにあるのではありません。もう一つは対中態度と重大な政策についてです。ウィルス起源追跡にせよ、香港、ウィグルなどの問題にせよ、アメリカの民主、共和両党は実に高度の共通認識を持っています。このようなアメリカからの観点についてはいかがお考えでしょうか。とりわけ米中両国は来週アラスカでバイデン大統領就任して以来初めてのハイレベル会談を行うことに際し、中国側は関連する政策と立場を調整或いは転換し、両国関係の再始動と修復を推進するのでしょうか。
134
+
135
+   李克强:过去几年中美关系的确遭遇了严重的困难,给两国和世界都带来了不利的影响。中美作为世界上最大的发展中国家和最大的发达国家,合则两利、斗则俱伤。中美建交40多年了,风风雨雨,能越过坎坷向前走,还是因为符合世界发展趋势,符合两国的根本利益。我们希望双方按照习近平主席最近和拜登总统通话的精神,尊重彼此的核心利益和重大关切,互不干涉内政和内部事务,秉持不冲突不对抗、相互尊重、合作共赢的原则,推动两国关系向着健康稳定的方向发展。这既符合两国人民的利益,也是国际社会的期待。
136
+
137
+   李克強:過去数年、中米関係は確かに深刻な困難に遭遇し、両国また全世界にマイナスな影響をもたらしました。中米両国は世界最大の発展途上国と最大の先進国として、協力すれば共に利益を得、対抗すれば共に損します。中米は国交樹立してすでに四十数年経て、風雨や困難を乗り越えて前へ��められたのは、世界発展の流れと両国の根本的利益に合致するからです。双方は習近平主席とバイデン大統領のこの間の電話会談の精神に則り、互いの核心的利益と重大関心事・懸念を尊重し、互いの内政と内部事務を干渉しなく、衝突せず対抗しなく、相互尊重、協力ウィンウィンの原則を堅持し、両国関係がより健全かつ安定した方向への発展を推進します。これは両国人民の利益に合致し、国際社会の共通の願いです。
138
+
139
+   中美两国历史文化、发展阶段、社会制度不同,彼此相处难免会有矛盾、有分歧,有的时候甚至比较尖锐,关键是如何对待。中美两国人民是有智慧、有能力的,双方还是要相互尊重、平等相待地进行对话沟通。我们希望中美有多领域、多层次的对话,即便一时达不成共识,也可以交换意见、增信释疑,这有利于管控和化解分歧。
140
+
141
+   中米両国は歴史文化や発展段階、社会制度が異なり、両国間に矛盾と食い違いが生じることは避けられなく、時々鋭いものですが、肝心なのはどう対応することであります。中米両国の人民は知恵と能力を持っています。双方はやはり相互尊重し、平等に対話と意思疎通を行うべきです。中米が多レベル、多分野で対話を行うことを希望します。共通認識が一時的に達成できなくても、意見交換や信頼増進、疑念払拭ができ、食い違いのマネージと解決に資するものです。
142
+
143
+   中美两国有着广泛的共同利益,有许多可以合作的领域。在去年多重冲击的背景下,中美两国的贸易规模仍然达到4.1万亿元,增长8.8%。我们还是应当把更多精力放在共同点上,去扩大共同利益。中美两国作为联合国安理会常任理事国,对于维护世界和平稳定、促进世界繁荣发展,都有重要责任。应该推动中美关系越过坎坷往前看,向着总体稳定的方向走。
144
+
145
+   中米両国は幅広く共通利益を持って、協力できる分野がたくさんあります。去年、複数の衝撃を背景にしても、中米両国間の貿易総額が依然として4.1兆元に達し、8.8%も成長しました。われわれはより多くのエネルギーを共通点に注ぎ、共通利益を拡大すべきです。中米両国は共に国連安全保障理事会常任理事国として、世界の平和と安定を維持することと、世界の繁栄と発展を促進することに、重要な責任を背負っています。中米関係が困難を乗り越えて、未来志向で、全般的に安定した方向へ向かうことを推進すべきです。
146
+
147
+   新华社记者:您一直强调要重视激发市场主体活力,发挥市场主体在经济发展中的重要作用。现在有一些市场主体反映,在生产经营、公平竞争、市场环境等方面还有一些困难和障碍。请问今年政府将出台哪些改革措施来助企纾困,让他们焕发新的生机?
148
+
149
+   新華社記者:市場主体の活力を引き出すことを重視し、経済発展における市場主体の役割を発揮させると強調しています。現在、一部の市場主体によりますと、生産経営、公平競争、市場環境などの方面において困難と障害があります。今年、政府は企業の苦境脱却支援と活力の引き出すことにどのような措置を打ち出しますか。
150
+
151
+   李克强:去年我们推进改革,很突出的一点就是制定和实施宏观政策时,围绕市场主体的需求来考虑,助力市场主体脱困、激发活力,撑起中国经济的基本盘。中国改革开放40多年来,我们发展社会主义市场经济,不断培育和发展市场主体。市场主体培育起来,就可以充分发挥市场在资源配置中的决定性作用和更好发挥政府作用。“十三五”期间的五年,我们的市场主体增加了6000多万户。去年在疫情冲击下,后期快速恢复增长,现在市场主体总数已经达到一亿三千多万户,而且去年个体工商户又新增1000多万户,从8000多万户增加到9000多万户,带动两亿多人就业。市场主体的活力激发、活跃度提高,这是政府推进改革的努力方向。
152
+
153
+   李克強:去年、我々は改革を推進する中、際立っているのは、市場主体の需要を考慮した上で、マクロ政策を策定·実施し、市場主体の苦境脱却を支援し、活力を引き起こし、中国経済の基盤を支えるものです。中国改革開放40数年来、我々は社会主義市場経済を発展させ、絶えず市場主体を育成·発展させてきました。市場主体の育成ができれば、資源配分において市場に決定的な役割を十分に果たさせ、政府の役割をよりよく���揮させることができます。第13次5ヵ年計画期の5年間において、我が国の市場主体は6000社に増えました。去年、新型コロナウイルス感染症の影響を受けましたが、下半期は急速に伸びが回復し、市場主体は既に1億3000万社に達し、自営業者は新規に1000万社増加し、8000万社から9000万社に増え、2億以上の雇用を創出しました。市場主体の活力が引き起こされ、活躍度が向上されました。これは政府が改革の推進に取り組む方向です。
154
+
155
+   今年我们政策的制定和实施,还是要继续围着市场主体转,这就需要继续推进“放管服”改革,让市场主体不仅生存,而且活跃。去年我们说留得青山,就赢得未来,今年说留得市场主体的青山常在,就能够生机盎然,使中国经济的活力和韧性充分体现。所以转变政府职能很重要的是要把市场主体应有的权限给他们,让他们去发挥。对于审批环节,我们要继续减环节、减材料、减费用、减时限。一方面为市场主体减负,另一方面为他们松绑,放开手脚去竞争。
156
+
157
+   今年、我々の政策の制定と実施は引き続き市場主体を巡るべきであり、「行政簡素化と権限移譲」、「緩和と管理の結合」、「サービスの最適化」改革を引き続き推進し、市場主体を生存させるのみならず、活躍させることが必要です。去年、青山を残せば未来を勝ち取れると言いましたが、今年は市場主体という青山を残せば活気に溢れ、中国経済の活力と強靭性が存分に体現できます。そのため、政府の職能の転換に肝心なのは市場主体にあるべき権限を渡し、発揮させることです。審査の段階について、我々は引き続きプロセスを削減し、材料を減らし、費用を引き下げ、時限を短縮させるべきです。市場主体のために負担を減らすと同時に、規制を緩め、躊躇なく競争できるようにさせます。
158
+
159
+   当然,要竞争就应当是公平的竞争,就必须有监管。管出公平、管出公正,这样才能让市场主体显示真正的创造力。所以我们放管并重,创新监管方式,加强事中事后监管,这都是改革。我们支持“互联网+”、物联网这些新业态,但是对于坑蒙拐骗、造假失信,或者利用新业态的旗号去搞诈骗、非法集资的,就要坚决打击,因为把市场搅乱了,没有公平,竞争就不可能持续,就不可能展现更强的活力。
160
+
161
+   もちろん、競争するには、公平を保ち、監督管理しなければなりません。管理で公平と公正を実現してこそ、市場主体に真の創造力を示させます。そのため、我々は権限移譲と監督管理を両立させ、監督管理の方式を革新し、事中・事後の監督管理を強化します。これらも改革です。我々は、「インターネット+」「IOT 」など新業態を支持しますが、詐欺と不正行為、あるいは新業態の看板を掲げて詐欺と違法な資金調達をすることに対し、断固として取り締まらなければなりません。これかの行為は市場を撹乱するからです。公平がなければ、競争が持続することはできず、より強い活力を示すことはありえません。
162
+
163
+   政府还要进一步优化政务服务,为企业重质量、守诚信、精工细作去提高产品和服务竞争力来营造环境。对于政务服务中那些涉及企业、人民群众经常要办的事项,要努力做到网上办、掌上办、一次办,让市场主体有更强的活力,社会有创造力。
164
+
165
+   政府は政務サービスをより一層改善し、企業が質を重視し、信用を守り、職人技によって製品とサービスの競争力を向上させるための環境を作り出していきます。政務サービスにおける企業と大衆の利用頻度の高い業務について、オンライン化・アプリ化・ワンストップ化に取り組み、市場主体をより活躍的にさせ、社会をより創造的にさせていきます。
166
+
167
+   台湾无线卫星电视台记者:今年年初,台湾方面表示希望跟大陆能够在后疫情时代恢复交流。与此同时,两岸关系目前并没有看到和缓的迹象,请问大陆方面对此怎么看,未来又如何因应?
168
+
169
+   台湾TVBS新聞台:今年の初めに、台湾側はポストコロナ時代において大陸部との交流の回復を希望すると示しました。しかし現在、両岸関係には緩和の兆しが見えていないようです。これについて大陸部側はどのように捉えていますか。これからいかに対応しますか。
170
+
171
+   李克强:我们对台的大政方针是一贯的,也是非常明确的,就是坚持一个中国原则和��九二共识”。在此前提下,我们欢迎台湾任何政党、团体同我们交往,也欢迎台湾各党派团体人士就两岸关系和民族未来与我们开展对话。
172
+
173
+   李克強:我々の台湾関連業務の重要政策・方針は一貫したものであり、明確なものです。それは、一つの中国の原則と「92コンセンサス」を堅持することです。これを前提に、台湾のあらゆる政党・団体と行き来すること、台湾の各党派・団体の皆さんとともに両岸関係と民族の未来について対話を行うことを歓迎します。
174
+
175
+   我们坚持推进两岸关系和平发展和祖国统一,反对任何形式的“台独”分裂活动,也反对外部势力的干涉。
176
+
177
+   我々は両岸関係の平和的発展と祖国の統一を進めることを堅持し、いかなる形の『台湾独立』分裂活動に反対し、外部勢力による干渉に反対します。
178
+
179
+   我们一直秉持“两岸一家亲”的理念。这几年出台了很多惠及台企台胞的政策,不少台湾企业和同胞从中受益。我们会继续让台湾同胞分享大陆的发展机遇,继续推动两岸融合发展。
180
+
181
+   我々は「海峡両岸は一家族のように親しく」という理念を一貫して堅持します。ここ数年、台湾系企業と台湾同胞に恩恵をもたらした政策が多く打ち出され、数多くの台湾系企業と台湾同胞がこの中から利益を受けています。我々は引き続き台湾同胞と大陸部の発展チャンスを共有し、両岸の融合的発展を推進します。
182
+
183
+   人民日报社记者:受疫情等因素影响,民生领域一些难题凸显,如就医、子女教育、养老托幼等成为我国经济社会发展的短板,也影响了人民群众的获得感和幸福感。请问政府打算从哪些方面着手来解决这些难题?
184
+
185
+   『人民日報』紙記者:新型コロナウイルス感染症などの要素の影響で、民生分野の一部の難題が際立っています。例えば、医療、教育、養老、託児などが我が国経済社会発展の短所となっています、人民大衆の獲得感と幸福感にも影響しています。政府はどのようにこれらの難題の解決に着手しますか?
186
+
187
+   李克强:今年政府总支出比去年略有增加,盘子不小,所以要更多地向量大面广的民生领域倾斜,特别是义务教育和基本医疗。如果下半年经济持续向好,那么会下更大的力度把财政支出包括债务支出投向这些领域。这对拉动当年GDP增长可能不明显,但是对于长远发展、惠民生有支撑作用。我们要坚持以人民为中心的发展思想,这是习近平新时代中国特色社会主义思想的重要内容,人民的政府就应当以民之所望为施政所向。
188
+
189
+   李克強:今年政府の総支出は去年よりやや増えました。総額は少なくないので、量が大きくて面が広い民生領域により多く傾斜すべきで、特に義務教育と基本医療です。今年の後半は経済が持続的に好調であれば、より一層力を入れて債務を含む財務支出をこれらの分野に投入します。これはGDPの成長を牽引することに効果は明らかではないかもしれませんが、長期にわたる発展と民生に恩恵をもたらすことを支えています。我々は人民を中心とする発展思想を堅持すべきです。これが習近平新時代の中国の特色ある社会主義思想の重要な内容であり、人民の政府は人民の望むところを施政の方向にすべきです。
190
+
191
+   教育和健康关系到每个家庭、国家与民族的未来。我在两会参加代表团审议时,一位中学校长说,现在县乡中学还缺乏优质的教师资源,教师的待遇不高,学历也很难提高。我们今年要下决心,加大对县乡教师培训的投入,让他们能够在职便利地提高学历,职称评定要采取倾斜政策。对于在城市的农民工子弟,只要拿到居住证,一定要让他们有受教育的机会。决不能因为家境、区域不同,让孩子输在起跑线上。机会公平中,教育公平是最大的公平。
192
+
193
+   教育と健康はすべての家庭、そして国家と民族の未来に関わっています。全人代と全国政治協議会議の代表団討論に参加した際に、ある中学校の校長が「現在、県・郷の中学校はまだの教師資源を欠けています。教師の待遇は高くないし、学歴を引き上げるのも難しい。」と話しました。我々今年は決心し、県・郷の教師の養成に一層力をいれ、彼らが在職でいながら便利に学歴を引きあげるようにして、職業称号の認定にも優遇政策を取ります。都市部の出稼ぎ労働者の子供に対しては、居住証さえあれば、必ず教育を受ける機会を提供します。家庭条件、居住地域の違いで子供がスタートラインで負けることを決して放任してはなりません。機会公平の中で、教育の公平が最大な公平です。
194
+
195
+   健康是幸福的基础,也是生产力。现在县乡基层的医疗机构和力量还比较薄弱,很多人有病往大城市大医院跑。今年我们要多措并举加大对县乡医院、卫生院的投入,对于扩大门诊医保报销范围和常见病药品报销范围、降低药品和高值医用耗材价格等,都要采取一些让群众切实感受得到的措施。也就是说,要让群众看病多一点便利,治病少一点负担。这也有利于巩固脱贫攻坚成果,防止因病返贫致贫。
196
+
197
+   健康は幸福の礎であり、生産力でもあります。現在、県・郷の末端の医療機構と力はまだ比較的に脆弱なものであり、多くの人々がいざと病気になれば大都市の大病院に行きます。今年我々は様々な措置を講じて県・郷の病院、衛生院への投入を強化し、外来診療費の医療保険清算と常用薬の清算範囲の拡大、薬品と高額医薬消耗品価格の引き下げなどに対しては、人々が切実に感じられる措置を取らなければなりません。つまり、人々が診療を受けることにより多くの便利をもたらし、治療により少ない負担をかけることです。これも貧困脱却堅塁攻略の成果を固め、病気による貧困化・再貧困化を防止することに利しています。
198
+
199
+   在养老托幼方面,政府还要通过引导社会力量来兴办社区服务业,尽可能在税收等方面给予优惠支持,给家庭在养老托幼方面不仅减轻一点负担,也多一点温暖。总之,民生方面的事很多,我们要在发展中持续改善民生。我们现在实施的是广覆盖、保基本的社会保障制度。保基本,要在经济发展中持续提高水平,但也要突出重点。对于事关人人、事关国家和民族未来的义务教育和基本医疗,各级政府一定要扛在肩上。
200
+
201
+   養老と託児について、政府は社会の力への導きによりコミュニティサービス業を興し、できる限り税収などの面において優遇と支持を与え、家庭の養老と託児の負担を減らすのみならず、暖かさを感じさせます。民生におけることはたくさんあり、発展の中で持続的に民生を改善します。我々が現在実施しているのは幅広くカバーし、基本を確保する社会保障制度です。基本を確保するには、経済発展の中で持続的に水準を引き上げると同時に重点を際立たせるべきです。一人ひとりに関わり、国と民族の未来に関わる義務教育と基本医療については、各級の政府はそれを担わなければなりまん。
202
+
203
+   新加坡联合早报记者:中国提出加快构建以国内大循环为主体、国内国际双循环相互促进的新发展格局。请问这是不是中国在美国等西方国家“围堵”下被迫采取的某种战略收缩?另外,在中国发展国内大循环、构建超大规模的国内市场的时候会带来怎样的变化?留给外资的空间未来会不会越来越小?
204
+
205
+   シンガポール聯合早報記者:中国は国内大循環を主体として、国内・国際双循環が互いに促進する新たな発展の構図をうち出しました。これは中国がアメリカなど西側の国の「包囲」の中、止むを得ずとった一種の戦略的収縮ですか?また、中国は国内大循環を発展し、超大規模の国内市場を構築する中、どのような変化をもたらしますか?外資に残す余地がますます狭くなっていきますか?
206
+
207
+   李克强:中国提出要立足新发展阶段、贯彻新发展理念、构建新发展格局,以国内大循环为主体,国内国际双循环相互促进,这既是要做大国内市场,也是要扩大开放。中国经济已经深度融入世界经济,可以说你中有我、我中有你,关起门来是没有出路的。中国会不断地、主动地扩大开放,这是中国自身利益的需要,也有利于世界。中国把内需市场做大,带动自身发展,也会给外资、外国产品和服务带来巨大的机会。我在参加代表团审议的时候,一位企业家说,抓住内循环就是要开拓国内市场,抓住双循环就是要开拓国际市场,两个市场还可以打通。他说得很朴实,但言简意赅。
208
+
209
+   李克強:中国は新たな発展段階に立脚し、新たな発展理念を貫徹し、新たな発展の形を構築し、国内大循環を主体として、国内・国際双循環が互いに促進することを打ち出しました。これは国内市場を大きくするとともに、開放を拡大しいくことでもあります。中国経済は世界経済深く融合し、持ちつ持たれつの関係です。扉を閉じることは袋小路に向かうだけです。中国は絶えず進んで開放を拡大していきます。これは自国利益の需要であり、世界にもプラスとなります。中国は内需市場を大きくし、自国の発展を実現するのも外資、外国の製品とサービスに巨大なチャンスをもたらします。私が全人代の代表団で討論に参加した時、ある企業家は「国内循環を掴むのは国内市場を開拓することで、双循環を掴むのは国際市場を開拓することだ。二つの市場を打ち抜くこともできる」と言いました。素朴で簡潔な話ですが、意味は尽くされています。
210
+
211
+   开放还需要各国共同努力,相向而行。经过8年的努力,去年东盟10国、中、日、韩、澳、新15国谈成了RCEP协定,这是世界上最大的自贸区,是不同社会制度、文化习俗,不同发展阶段国家共同建设的。这说明,只要相互尊重、平等相待,可以谈出共识,找到共同利益,扩大各国人民的福祉,而且有助于地区产业链、供应链的稳定,会给世界经济增添动力。中国是世界产业链、供应链的重要组成部分,我们不仅要发挥自身的作用,而且要履行自身的责任,维护以世贸组织规则为基础的多边贸易体制。只要是对互利共赢有利的,无论是多边、双边的机制,我们都持积极开放的态度。
212
+
213
+   開放には各国が共同で努力し、歩み寄ることが求められています。8年の努力を経て、ASEAN10か国、中国、日本、韓国、オーストラリア、ニュージーランド15カ国が昨年、RCEP協定を締結しました。これは世界で最大規模のFTAであり、異なる世界制度、文化習慣を有し、異なる発展段階にある国々が共同で建設したものです。これは尊重しあい、平等に付き合えば、共通認識と共通の利益を見出し、各国の人々により多くの恩恵をもたらすことができると裏付けています。また、地域の産業チェーン、サプライチェーンの安定に有利し、世界経済に原動力を注ぎます。中国は世界の産業チェーン、サプライチェーンの重要な一部分であり、然るべき役割を果たすだけではなく、責任を履行し、WTOのルールに基づく多国間貿易体制を擁護します。互恵ウィンウィンに有利でさえあれば、多国間メカニズムにせよ二国間メカニズムにせよ、中国は前向きでオープン姿勢を保ちます。
214
+
215
+   我们会进一步主动地对外开放,继续缩减外商来华投资负面清单,继续推动包括服务业在内的对外开放。我注意到,很多外企关心中国的营商环境,我们还要继续打造市场化、法治化、国际化的营商环境。总而言之,通过多种努力,在扩大内需中不断扩大开放,继续让中国成为外商投资的重要目的地、世界的大市场。
216
+
217
+   中国はより一層対外開放を進んで実施し、外資企業投資ネガティブリストを引き続き削減し、サービス業を含む対外開放を推し進めていきます。多くの外国企業が中国のビジネス環境に関心を持っていることに留意しました。中国が市場化、法制化、国際化のビジネス環境作りに引き続き力を入れていきます。、我々は様々な努力を通じて、内需の拡大と共に開放を絶えず拡大し、引き続き中国を外資にとって重要な海外投資先にしながら、世界の大市場にしていきます。
data/英译中国现代散文选1(汉外对照丛书).txt ADDED
The diff for this file is too large to render. See raw diff
 
docs/source/intro.rst CHANGED
@@ -15,7 +15,7 @@ Properly aligned texts (paragraph-to-paragraph or sentence-to-sentence) find man
15
  Limitations
16
  ***********
17
 
18
- Currently, only zh-en/en-zh pairs are supported for fast-track mode although further pairs will be added if and when time permits.
19
  If you are willing to help with a particular pair (for example, de-zh, ja-zh, ru-zh, etc.), you are welcome to contact the developer.
20
 
21
- An experimental slow-track mode (approximately 500 pairs per 5 minutes) is introdueced for other laugnage pairs.
 
15
  Limitations
16
  ***********
17
 
18
+ Currently, only zh-en/en-zh pairs are supported in fast-track mode although further pairs will be added if and when time permits.
19
  If you are willing to help with a particular pair (for example, de-zh, ja-zh, ru-zh, etc.), you are welcome to contact the developer.
20
 
21
+ An experimental slow-track mode (time required approximately 10 times that of fast-track mode) is introdueced for other laugnage pairs.
img/plt.png CHANGED
radiobee/__main__.py CHANGED
@@ -1,9 +1,9 @@
1
  """Run interactively."""
2
- # pylint: disable=invalid-name, too-many-arguments, unused-argument, redefined-builtin, wrong-import-position, too-many-locals, too-many-statements
3
  from typing import Any, Tuple, Optional, Union # noqa
4
 
5
  import sys
6
- from pathlib import Path
7
  import platform
8
  import signal
9
  from random import randint
@@ -17,6 +17,7 @@ from sklearn.cluster import DBSCAN # noqa
17
 
18
  import joblib
19
  from varname import nameof
 
20
  import logzero
21
  from logzero import logger
22
 
@@ -39,6 +40,11 @@ import gradio as gr
39
  from radiobee.process_upload import process_upload
40
  from radiobee.gradiobee import gradiobee
41
 
 
 
 
 
 
42
  sns.set()
43
  sns.set_style("darkgrid")
44
  fastlid.set_languages = ["en", "zh"]
@@ -97,8 +103,11 @@ if __name__ == "__main__":
97
  # likely hf spaces
98
  server_name = "0.0.0.0"
99
  debug = False
 
 
100
  else:
101
  server_name = "127.0.0.1"
 
102
 
103
  if debug:
104
  logzero.loglevel(10)
@@ -234,7 +243,26 @@ if __name__ == "__main__":
234
  [
235
  "data/test-dual.txt",
236
  "data/empty.txt",
237
- # None, # does not work
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  "linear",
239
  "None",
240
  "None",
@@ -252,6 +280,26 @@ if __name__ == "__main__":
252
  10,
253
  6,
254
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
255
  ]
256
 
257
  # modi examples setup
@@ -329,8 +377,6 @@ if __name__ == "__main__":
329
  """
330
  ).strip()
331
 
332
- # "<p style='text-align: center'><a href='https://arxiv.org/abs/2112.11641' target='_blank'>JoJoGAN: One Shot Face Stylization</a>| <a href='https://github.com/mchong6/JoJoGAN' target='_blank'>Github Repo Pytorch</a></p> <center><img src='https://visitor-badge.glitch.me/badge?page_id=akhaliq_jojogan' alt='visitor badge'></center> <p style='text-align: center'>samples from repo: <img src='https://raw.githubusercontent.com/mchong6/JoJoGAN/main/teaser.jpg' alt='animation'/></p>" # noqa
333
-
334
  article = dedent(
335
  """ <p style="text-align: center">readiobee docs:
336
  <a href="https://radiobee.readthedocs.io/" target="_blank">readthedocs</a>
@@ -377,6 +423,7 @@ if __name__ == "__main__":
377
  description=description,
378
  article=article,
379
  examples=examples,
 
380
  # theme="darkgrass",
381
  theme="grass",
382
  layout="vertical", # horizontal unaligned
@@ -388,12 +435,13 @@ if __name__ == "__main__":
388
  "excelsior",
389
  ], # "paragon"],
390
  css=f"{css_image} {css_input_file} {css_output_file}",
 
391
  )
392
 
393
  iface.launch(
394
- share=False,
395
- # share=True,
396
  debug=debug,
 
397
  server_name=server_name,
398
  # server_name="127.0.0.1",
399
  server_port=server_port,
 
1
  """Run interactively."""
2
+ # pylint: disable=invalid-name, too-many-arguments, unused-argument, redefined-builtin, unused-import, wrong-import-position, too-many-locals, too-many-statements
3
  from typing import Any, Tuple, Optional, Union # noqa
4
 
5
  import sys
6
+ from pathlib import Path # noqa
7
  import platform
8
  import signal
9
  from random import randint
 
17
 
18
  import joblib
19
  from varname import nameof
20
+ from icecream import install as ic_install, ic
21
  import logzero
22
  from logzero import logger
23
 
 
40
  from radiobee.process_upload import process_upload
41
  from radiobee.gradiobee import gradiobee
42
 
43
+ ic_install()
44
+ ic.configureOutput(includeContext=True)
45
+ ic.enable()
46
+ # ic.disenable() # to turn off
47
+
48
  sns.set()
49
  sns.set_style("darkgrid")
50
  fastlid.set_languages = ["en", "zh"]
 
103
  # likely hf spaces
104
  server_name = "0.0.0.0"
105
  debug = False
106
+ debug = True
107
+ share = True
108
  else:
109
  server_name = "127.0.0.1"
110
+ share = False
111
 
112
  if debug:
113
  logzero.loglevel(10)
 
243
  [
244
  "data/test-dual.txt",
245
  "data/empty.txt",
246
+ "linear",
247
+ "None",
248
+ "None",
249
+ "None",
250
+ 10,
251
+ 6,
252
+ ],
253
+ [
254
+ "data/英译中国现代散文选1(汉外对照丛书).txt",
255
+ "data/empty.txt",
256
+ "linear",
257
+ "None",
258
+ "None",
259
+ "None",
260
+ 10,
261
+ 6,
262
+ ],
263
+ [
264
+ "data/test-zh-ja.txt",
265
+ "data/empty.txt",
266
  "linear",
267
  "None",
268
  "None",
 
280
  10,
281
  6,
282
  ],
283
+ [
284
+ "data/demian-hesse-de.txt",
285
+ "data/demian-hesse-en.txt",
286
+ "linear",
287
+ "None",
288
+ "None",
289
+ "None",
290
+ 10,
291
+ 6,
292
+ ],
293
+ [
294
+ "data/catcher-in-the-rye-shixianrong-zh.txt",
295
+ "data/catcher-in-the-rye-boll-de.txt",
296
+ "linear",
297
+ "None",
298
+ "None",
299
+ "None",
300
+ 10,
301
+ 6,
302
+ ],
303
  ]
304
 
305
  # modi examples setup
 
377
  """
378
  ).strip()
379
 
 
 
380
  article = dedent(
381
  """ <p style="text-align: center">readiobee docs:
382
  <a href="https://radiobee.readthedocs.io/" target="_blank">readthedocs</a>
 
423
  description=description,
424
  article=article,
425
  examples=examples,
426
+ examples_per_page=4,
427
  # theme="darkgrass",
428
  theme="grass",
429
  layout="vertical", # horizontal unaligned
 
435
  "excelsior",
436
  ], # "paragon"],
437
  css=f"{css_image} {css_input_file} {css_output_file}",
438
+ enable_queue=True,
439
  )
440
 
441
  iface.launch(
442
+ share=share,
 
443
  debug=debug,
444
+ show_error=True,
445
  server_name=server_name,
446
  # server_name="127.0.0.1",
447
  server_port=server_port,
radiobee/align_sents.py CHANGED
@@ -1,5 +1,5 @@
1
  """Align sents via gale-church."""
2
- # pylint: disable=
3
 
4
  from typing import List, Tuple # noqa
5
 
@@ -38,8 +38,10 @@ def align_sents(lst1: List[str], lst2: List[str]) -> List[Tuple[str, str]]:
38
 
39
  texts = []
40
  # for elm in aset:
41
- for elm0, elm1 in amended_avec:
 
42
  # elm0, elm1, elm2 = elm
 
43
  _ = []
44
 
45
  # src_text first
 
1
  """Align sents via gale-church."""
2
+ # pylint: disable=invalid-name
3
 
4
  from typing import List, Tuple # noqa
5
 
 
38
 
39
  texts = []
40
  # for elm in aset:
41
+ # for elm0, elm1 in amended_avec:
42
+ for elm in amended_avec:
43
  # elm0, elm1, elm2 = elm
44
+ elm0, elm1 = elm[:2]
45
  _ = []
46
 
47
  # src_text first
radiobee/align_texts.py CHANGED
@@ -1,4 +1,6 @@
1
  """Align texts based on aset, src_text, tgt_text."""
 
 
2
  from typing import List, Tuple, Union
3
  from logzero import logger
4
 
 
1
  """Align texts based on aset, src_text, tgt_text."""
2
+ # pylint: disable=unused-variable
3
+
4
  from typing import List, Tuple, Union
5
  from logzero import logger
6
 
radiobee/amend_avec.py CHANGED
@@ -1,5 +1,5 @@
1
  """Amend avec from align_block."""
2
- # pylint: disable=
3
 
4
  from typing import List, Tuple, Union
5
 
 
1
  """Amend avec from align_block."""
2
+ # pylint: disable=unused-variable, unused-import
3
 
4
  from typing import List, Tuple, Union
5
 
radiobee/app.py CHANGED
@@ -1,4 +1,6 @@
1
  """Talk to spaces VM via subprocess.check_output."""
 
 
2
  # import httpx
3
  import subprocess as sp
4
  from shlex import split
 
1
  """Talk to spaces VM via subprocess.check_output."""
2
+ # pylint: disable=unused-variable, invalid-name
3
+
4
  # import httpx
5
  import subprocess as sp
6
  from shlex import split
radiobee/cmat2tset.py CHANGED
@@ -1,4 +1,6 @@
1
  """Gen triple-set from a matrix."""
 
 
2
  from typing import List, Tuple, Union # noqa
3
 
4
  import numpy as np
 
1
  """Gen triple-set from a matrix."""
2
+ # pylint: disable=unused-import
3
+
4
  from typing import List, Tuple, Union # noqa
5
 
6
  import numpy as np
radiobee/docterm_scores.py CHANGED
@@ -2,9 +2,11 @@
2
 
3
  refer also to fast-scores fast_scores.py and gen_model.py (sklearn.feature_extraction.text.TfidfVectorizer).
4
  """
 
 
5
  from typing import Dict, Iterable, List, Optional, Union # noqa
6
- import numpy as np
7
  from itertools import chain
 
8
  from psutil import virtual_memory
9
  from more_itertools import ilen
10
 
@@ -48,8 +50,8 @@ def docterm_scores(
48
  for xelm in iter(doc1):
49
  for elm in iter(xelm):
50
  assert isinstance(elm, str)
51
- except AssertionError:
52
- raise AssertionError(" doc1 is not of the typing Iterable[Iterable[str]] ")
53
  except Exception as e:
54
  logger.error(e)
55
  raise
@@ -57,8 +59,8 @@ def docterm_scores(
57
  for xelm in iter(doc2):
58
  for elm in iter(xelm):
59
  assert isinstance(elm, str)
60
- except AssertionError:
61
- raise AssertionError(" doc2 is not of the typing Iterable[Iterable[str]] ")
62
  except Exception as e:
63
  logger.error(e)
64
  raise
 
2
 
3
  refer also to fast-scores fast_scores.py and gen_model.py (sklearn.feature_extraction.text.TfidfVectorizer).
4
  """
5
+ # pylint: disable=too-many-arguments, too-many-locals, invalid-name, unused-import
6
+
7
  from typing import Dict, Iterable, List, Optional, Union # noqa
 
8
  from itertools import chain
9
+ import numpy as np
10
  from psutil import virtual_memory
11
  from more_itertools import ilen
12
 
 
50
  for xelm in iter(doc1):
51
  for elm in iter(xelm):
52
  assert isinstance(elm, str)
53
+ except AssertionError as exc:
54
+ raise AssertionError(" doc1 is not of the typing Iterable[Iterable[str]] ") from exc
55
  except Exception as e:
56
  logger.error(e)
57
  raise
 
59
  for xelm in iter(doc2):
60
  for elm in iter(xelm):
61
  assert isinstance(elm, str)
62
+ except AssertionError as exc:
63
+ raise AssertionError(" doc2 is not of the typing Iterable[Iterable[str]] ") from exc
64
  except Exception as e:
65
  logger.error(e)
66
  raise
radiobee/en2zh.py CHANGED
@@ -5,7 +5,9 @@ from typing import Iterable, List, Union
5
  import warnings
6
 
7
  import copy
8
- from radiobee.mdx_e2c import mdx_e2c
 
 
9
 
10
  warnings.simplefilter('ignore', DeprecationWarning)
11
 
@@ -25,6 +27,9 @@ def en2zh(
25
  Returns
26
  res: list of str
27
  """
 
 
 
28
  res = copy.deepcopy(text)
29
  if isinstance(text, str):
30
  # res = [text.split()]
 
5
  import warnings
6
 
7
  import copy
8
+
9
+ # from radiobee.mdx_e2c import mdx_e2c # moved to local for lazy loading
10
+ # from lazy import lazy
11
 
12
  warnings.simplefilter('ignore', DeprecationWarning)
13
 
 
27
  Returns
28
  res: list of str
29
  """
30
+ # to effect lazy loading
31
+ from radiobee.mdx_e2c import mdx_e2c # pylint: disable=import-outside-toplevel
32
+
33
  res = copy.deepcopy(text)
34
  if isinstance(text, str):
35
  # res = [text.split()]
radiobee/error_msg.py CHANGED
@@ -1,4 +1,6 @@
1
  """Prepare an error message for gradiobee."""
 
 
2
  from typing import Optional, Tuple, Union
3
  import pandas as pd
4
 
 
1
  """Prepare an error message for gradiobee."""
2
+ # pylint: disable=invalid-name
3
+
4
  from typing import Optional, Tuple, Union
5
  import pandas as pd
6
 
radiobee/files2df.py CHANGED
@@ -1,4 +1,6 @@
1
  """Convert two iesl to pandas.DataFrame."""
 
 
2
  from itertools import zip_longest
3
  # import tempfile
4
  import pandas as pd
 
1
  """Convert two iesl to pandas.DataFrame."""
2
+ # pylint: disable=invalid-name
3
+
4
  from itertools import zip_longest
5
  # import tempfile
6
  import pandas as pd
radiobee/gen_aset.py CHANGED
@@ -1,4 +1,6 @@
1
  """Genereat align set (aset) based on pset (pair set), src_lang and tgt_len."""
 
 
2
  from typing import List, Tuple, Union
3
  from itertools import zip_longest
4
 
 
1
  """Genereat align set (aset) based on pset (pair set), src_lang and tgt_len."""
2
+ # pylint: disable=unused-variable
3
+
4
  from typing import List, Tuple, Union
5
  from itertools import zip_longest
6
 
radiobee/gen_eps_minsamples.py CHANGED
@@ -4,10 +4,13 @@
4
  def gen_eps_minsamples(src_len: int, tgt_len: int) -> dict:
5
  """Gen suggested eps min_samples."""
6
  eps = src_len * 0.01
7
- if eps < 3:
8
- eps = 3
 
9
 
10
  min_samples = tgt_len / 100 * 0.5
11
- if min_samples < 3:
12
- min_samples = 3
 
 
13
  return {"eps": eps, "min_samples": min_samples}
 
4
  def gen_eps_minsamples(src_len: int, tgt_len: int) -> dict:
5
  """Gen suggested eps min_samples."""
6
  eps = src_len * 0.01
7
+
8
+ # if eps < 3: eps = 3
9
+ eps = max(3, eps)
10
 
11
  min_samples = tgt_len / 100 * 0.5
12
+
13
+ # if min_samples < 3: min_samples = 3
14
+ min_samples = max(3, min_samples)
15
+
16
  return {"eps": eps, "min_samples": min_samples}
radiobee/gen_model.py CHANGED
@@ -8,6 +8,8 @@ doc_term_matrix
8
 
9
  tokenized_docs = [insert_spaces(elm).split() for elm in textzh]
10
  """
 
 
11
  from typing import Dict, Iterable, List, Optional, Union # noqa
12
 
13
  from textacy.representations import Vectorizer
@@ -30,16 +32,13 @@ def gen_model(
30
  """Generate a model (textacy.representations.Vectorizer).
31
 
32
  Args:
33
- doc: tokenized docs
34
-
35
  (refer to textacy.representation.Vectorizer)
36
  tf_type: Type of term frequency (tf) to use for weights' local component:
37
-
38
  - "linear": tf (tfs are already linear, so left as-is)
39
  - "sqrt": tf => sqrt(tf)
40
  - "log": tf => log(tf) + 1
41
  - "binary": tf => 1
42
-
43
  idf_type: Type of inverse document frequency (idf) to use for weights'
44
  global component:
45
 
@@ -91,8 +90,8 @@ def gen_model(
91
  for xelm in iter(tokenized_docs):
92
  for elm in iter(xelm):
93
  assert isinstance(elm, str)
94
- except AssertionError:
95
- raise AssertionError(" tokenized_docs is not of the typing Iterable[Iterable[str]] ")
96
  except Exception as e:
97
  logger.error(e)
98
  raise
 
8
 
9
  tokenized_docs = [insert_spaces(elm).split() for elm in textzh]
10
  """
11
+ # pylint: disable=too-many-arguments, invalid-name, unused-import
12
+
13
  from typing import Dict, Iterable, List, Optional, Union # noqa
14
 
15
  from textacy.representations import Vectorizer
 
32
  """Generate a model (textacy.representations.Vectorizer).
33
 
34
  Args:
35
+ tokenized_docs: tokenized docs
 
36
  (refer to textacy.representation.Vectorizer)
37
  tf_type: Type of term frequency (tf) to use for weights' local component:
 
38
  - "linear": tf (tfs are already linear, so left as-is)
39
  - "sqrt": tf => sqrt(tf)
40
  - "log": tf => log(tf) + 1
41
  - "binary": tf => 1
 
42
  idf_type: Type of inverse document frequency (idf) to use for weights'
43
  global component:
44
 
 
90
  for xelm in iter(tokenized_docs):
91
  for elm in iter(xelm):
92
  assert isinstance(elm, str)
93
+ except AssertionError as e:
94
+ raise AssertionError(" tokenized_docs is not of the typing Iterable[Iterable[str]] ") from e
95
  except Exception as e:
96
  logger.error(e)
97
  raise
radiobee/gen_pset.py CHANGED
@@ -2,6 +2,8 @@
2
 
3
  tinybee.find_pairs.py with fixed estimator='dbscan' eps=eps, min_samples=min_samples
4
  """
 
 
5
  from typing import List, Tuple, Union
6
 
7
  import numpy as np
@@ -22,6 +24,7 @@ def _gen_pset(
22
  # ) -> List[Tuple[int, int, Union[float, str]]]:
23
  ) -> List[Tuple[Union[float, str], Union[float, str], Union[float, str]]]:
24
  """Gen pset from cmat.
 
25
  Find pairs for a given cmat.
26
 
27
  Args:
@@ -86,8 +89,9 @@ def _gen_pset(
86
  # low_ = np.min(ymax) - 1 # reset to minimum_value - 1
87
 
88
  buff = [(-1, -1, ""), (tgt_len, src_len, "")]
89
- # for _ in range(tgt_len):
90
- for idx, tset_elm in enumerate(tset):
 
91
  logger.debug("buff: %s", buff)
92
  # postion max in ymax and insert in buff
93
  # if with range given by iset+-delta and
@@ -152,6 +156,7 @@ def gen_pset(
152
 
153
  Refer to _gen_pset.
154
  """
 
155
  gen_pset.min_samples = min_samples
156
  for min_s in range(min_samples):
157
  logger.debug(" min_samples, try %s", min_samples - min_s)
 
2
 
3
  tinybee.find_pairs.py with fixed estimator='dbscan' eps=eps, min_samples=min_samples
4
  """
5
+ # pylint: disable=too-many-locals, unused-import, invalid-name
6
+
7
  from typing import List, Tuple, Union
8
 
9
  import numpy as np
 
24
  # ) -> List[Tuple[int, int, Union[float, str]]]:
25
  ) -> List[Tuple[Union[float, str], Union[float, str], Union[float, str]]]:
26
  """Gen pset from cmat.
27
+
28
  Find pairs for a given cmat.
29
 
30
  Args:
 
89
  # low_ = np.min(ymax) - 1 # reset to minimum_value - 1
90
 
91
  buff = [(-1, -1, ""), (tgt_len, src_len, "")]
92
+
93
+ # for idx, tset_elm in enumerate(tset):
94
+ for tset_elm in tset:
95
  logger.debug("buff: %s", buff)
96
  # postion max in ymax and insert in buff
97
  # if with range given by iset+-delta and
 
156
 
157
  Refer to _gen_pset.
158
  """
159
+ del verbose
160
  gen_pset.min_samples = min_samples
161
  for min_s in range(min_samples):
162
  logger.debug(" min_samples, try %s", min_samples - min_s)
radiobee/gen_row_alignment.py CHANGED
@@ -35,7 +35,7 @@ idx += 1; i0, i1, i2 = resu[idx]; '***' if i0 == ''
35
  else src_text[int(i0)], '***' if i1 == '' else tgt_text[int(i1)], ''
36
  if i2 == '' else i2
37
  """
38
- # pylint: disable=line-too-long
39
  from typing import List, Union
40
 
41
  # natural extrapolation with slope equal to 1
 
35
  else src_text[int(i0)], '***' if i1 == '' else tgt_text[int(i1)], ''
36
  if i2 == '' else i2
37
  """
38
+ # pylint: disable=line-too-long, unused-variable
39
  from typing import List, Union
40
 
41
  # natural extrapolation with slope equal to 1
radiobee/gen_vector.py CHANGED
@@ -9,11 +9,11 @@ from radiobee.insert_spaces import insert_spaces
9
 
10
 
11
  def gen_vector(text: Union[str, List[str]], model: Vectorizer) -> List[float]:
12
- """Gen vector for a give model.
13
 
14
  Args:
15
  text: string of Chinese chars or English words.
16
-
17
  filename = r"data\test-dual.txt"
18
  text = loadtext(filename)
19
  list1, list2 = zip(*text2lists(text))
 
9
 
10
 
11
  def gen_vector(text: Union[str, List[str]], model: Vectorizer) -> List[float]:
12
+ r"""Gen vector for a give model.
13
 
14
  Args:
15
  text: string of Chinese chars or English words.
16
+ model: model used
17
  filename = r"data\test-dual.txt"
18
  text = loadtext(filename)
19
  list1, list2 = zip(*text2lists(text))
radiobee/gradiobee.py CHANGED
@@ -1,5 +1,5 @@
1
  """Gradiobee."""
2
- # pylint: disable=invalid-name
3
  from pathlib import Path
4
  import platform
5
  import inspect
@@ -7,13 +7,14 @@ from itertools import zip_longest
7
 
8
  # import tempfile
9
 
10
- from logzero import logger
11
  from sklearn.cluster import DBSCAN
12
  from fastlid import fastlid
 
 
13
 
14
- import numpy as np
15
  import pandas as pd
16
- import matplotlib
17
  import matplotlib.pyplot as plt
18
  import seaborn as sns
19
 
@@ -33,8 +34,7 @@ uname = platform.uname()
33
  HFSPACES = False
34
  if "amzn2" in uname.release: # on hf spaces
35
  HFSPACES = True
36
- from sentence_transformers import SentenceTransformer
37
- model_s = SentenceTransformer('sentence-transformers/distiluse-base-multilingual-cased-v1')
38
  sns.set()
39
  sns.set_style("darkgrid")
40
  pd.options.display.float_format = "{:,.2f}".format
@@ -83,8 +83,6 @@ def gradiobee(
83
  if file2 is None:
84
  logger.debug("file2 is None")
85
  text2 = ""
86
-
87
- # TODO split text1 to text1 and text2
88
  else:
89
  logger.debug("file2.name: %s", file2.name)
90
  text2 = file2text(file2)
@@ -108,9 +106,13 @@ def gradiobee(
108
  if not _: # essentially empty file1
109
  return error_msg("Nothing worthy of processing in file 1")
110
 
 
 
 
 
111
  # exit if there are too many lines
112
- if len(_) > len_max:
113
- return error_msg(f" Too many lines ({len(_)}) > {len_max}, alignment op halted, sorry.", "info")
114
 
115
  _ = zip_longest(_, [""])
116
  _ = pd.DataFrame(_, columns=["text1", "text2"])
@@ -167,8 +169,12 @@ def gradiobee(
167
 
168
  # exit if there are too many lines
169
  len12 = len(list1) + len(list2)
170
- if len12 > 2 * len_max:
171
- return error_msg(f" Too many lines ({len(list1)} + {len(list2)} > {2 * len_max}), alignment op halted, sorry.", "info")
 
 
 
 
172
 
173
  file_dl = Path(f"{Path(file1.name).stem[:-8]}-{Path(file2.name).stem[:-8]}.csv")
174
  file_dl_xlsx = Path(
@@ -182,8 +188,8 @@ def gradiobee(
182
 
183
  logger.debug("lang1: %s, lang2: %s", lang1, lang2)
184
  if debug:
185
- print("gradiobee.py ln 82 lang1: %s, lang2: %s" % (lang1, lang2))
186
- print("fast track? ", lang1 in lang_en_zh and lang2 in lang_en_zh)
187
 
188
  # fast track
189
  if lang1 in lang_en_zh and lang2 in lang_en_zh:
@@ -201,22 +207,32 @@ def gradiobee(
201
  return error_msg(exc)
202
  # slow track
203
  else:
204
- if len(list1) + len(list2) > 200:
 
 
 
 
 
205
  msg = (
206
- "This will take too long (> 2 minutes) to complete "
 
207
  "and will hog this experimental server and hinder "
208
  "other users from trying the service. "
209
  "Aborted...sorry"
210
  )
211
  return error_msg(msg, "info ")
212
  try:
 
213
  vec1 = model_s.encode(list1)
214
  vec2 = model_s.encode(list2)
215
  # cmat = vec1.dot(vec2.T)
216
  cmat = vec2.dot(vec1.T)
217
  except Exception as exc:
218
  logger.error(exc)
219
- return error_msg(f"{exc}, {__file__} {inspect.currentframe().f_lineno}, period")
 
 
 
220
 
221
  tset = pd.DataFrame(cmat2tset(cmat))
222
  tset.columns = ["x", "y", "cos"]
@@ -287,6 +303,7 @@ def gradiobee(
287
  ylim, xlim = len1, len2
288
 
289
  # does not seem to show up
 
290
  logger.debug(" len1 (ylim): %s, len2 (xlim): %s", len1, len2)
291
  if debug:
292
  print(f" len1 (ylim): {len1}, len2 (xlim): {len2}")
@@ -323,6 +340,7 @@ def gradiobee(
323
  fig.suptitle(f"alignment projection\n(eps={eps}, min_samples={min_samples})")
324
 
325
  _ = DBSCAN(min_samples=min_samples, eps=eps).fit(df_).labels_ > -1
 
326
  # _x = DBSCAN(min_samples=min_samples, eps=eps).fit(df_).labels_ < 0
327
  _x = ~_
328
 
@@ -342,6 +360,7 @@ def gradiobee(
342
  )
343
 
344
  plt_loc = "img/plt.png"
 
345
  plt.savefig(plt_loc)
346
 
347
  # clustered
@@ -363,6 +382,8 @@ def gradiobee(
363
  df_aligned = df_aligned[["text2", "text1", "likelihood"]]
364
  df_aligned.columns = ["text1", "text2", "likelihood"]
365
 
 
 
366
  # round the last column to 2
367
  # df_aligned.likelihood = df_aligned.likelihood.round(2)
368
  # df_aligned = df_aligned.round({"likelihood": 2})
@@ -412,6 +433,9 @@ def gradiobee(
412
  # output_plot: gr.outputs.Image(type="auto", label="...")
413
  # return df_trimmed, output_plot, file_dl, file_dl_xlsx, df_aligned
414
  # return df_trimmed, output_plot, file_dl, file_dl_xlsx, styled, df_html # gradio cant handle style
 
 
 
415
  return df_trimmed, output_plot, file_dl, file_dl_xlsx, df_aligned, df_html
416
 
417
  # modi outputs
 
1
  """Gradiobee."""
2
+ # pylint: disable=invalid-name, too-many-arguments, too-many-branches, too-many-locals, too-many-statements, unused-variable, too-many-return-statements, unused-import
3
  from pathlib import Path
4
  import platform
5
  import inspect
 
7
 
8
  # import tempfile
9
 
 
10
  from sklearn.cluster import DBSCAN
11
  from fastlid import fastlid
12
+ from logzero import logger
13
+ from icecream import ic
14
 
15
+ import numpy as np # noqa
16
  import pandas as pd
17
+ import matplotlib # noqa
18
  import matplotlib.pyplot as plt
19
  import seaborn as sns
20
 
 
34
  HFSPACES = False
35
  if "amzn2" in uname.release: # on hf spaces
36
  HFSPACES = True
37
+
 
38
  sns.set()
39
  sns.set_style("darkgrid")
40
  pd.options.display.float_format = "{:,.2f}".format
 
83
  if file2 is None:
84
  logger.debug("file2 is None")
85
  text2 = ""
 
 
86
  else:
87
  logger.debug("file2.name: %s", file2.name)
88
  text2 = file2text(file2)
 
106
  if not _: # essentially empty file1
107
  return error_msg("Nothing worthy of processing in file 1")
108
 
109
+ logger.info(
110
+ "single file: len %s, max %s",
111
+ len(_), 2 * len_max
112
+ )
113
  # exit if there are too many lines
114
+ if len(_) > 2 * len_max:
115
+ return error_msg(f" Too many lines ({len(_)}) > {2 * len_max}, alignment op halted, sorry.", "info")
116
 
117
  _ = zip_longest(_, [""])
118
  _ = pd.DataFrame(_, columns=["text1", "text2"])
 
169
 
170
  # exit if there are too many lines
171
  len12 = len(list1) + len(list2)
172
+ logger.info(
173
+ "fast track: len1 %s, len2 %s, tot %s, max %s",
174
+ len(list1), len(list2), len(list1) + len(list2), 3 * len_max
175
+ )
176
+ if len12 > 3 * len_max:
177
+ return error_msg(f" Too many lines ({len(list1)} + {len(list2)} > {3 * len_max}), alignment op halted, sorry.", "info")
178
 
179
  file_dl = Path(f"{Path(file1.name).stem[:-8]}-{Path(file2.name).stem[:-8]}.csv")
180
  file_dl_xlsx = Path(
 
188
 
189
  logger.debug("lang1: %s, lang2: %s", lang1, lang2)
190
  if debug:
191
+ ic(f" lang1: {lang1}, lang2: {lang2}")
192
+ ic("fast track? ", lang1 in lang_en_zh and lang2 in lang_en_zh)
193
 
194
  # fast track
195
  if lang1 in lang_en_zh and lang2 in lang_en_zh:
 
207
  return error_msg(exc)
208
  # slow track
209
  else:
210
+ logger.info(
211
+ "slow track: len1 %s, len2 %s, tot: %s, max %s",
212
+ len(list1), len(list2), len(list1) + len(list2),
213
+ 3 * len_max
214
+ )
215
+ if len(list1) + len(list2) > 3 * len_max:
216
  msg = (
217
+ f" len1 {len(list1)} + len2 {len(list2)} > {3 * len_max}. "
218
+ "This will take too long to complete "
219
  "and will hog this experimental server and hinder "
220
  "other users from trying the service. "
221
  "Aborted...sorry"
222
  )
223
  return error_msg(msg, "info ")
224
  try:
225
+ from radiobee.model_s import model_s # pylint: disable=import-outside-toplevel
226
  vec1 = model_s.encode(list1)
227
  vec2 = model_s.encode(list2)
228
  # cmat = vec1.dot(vec2.T)
229
  cmat = vec2.dot(vec1.T)
230
  except Exception as exc:
231
  logger.error(exc)
232
+ _ = inspect.currentframe().f_lineno # type: ignore
233
+ return error_msg(
234
+ f"{exc}, {Path(__file__).name} ln{_}, period"
235
+ )
236
 
237
  tset = pd.DataFrame(cmat2tset(cmat))
238
  tset.columns = ["x", "y", "cos"]
 
303
  ylim, xlim = len1, len2
304
 
305
  # does not seem to show up
306
+ ic(f" len1 (ylim): {len1}, len2 (xlim): {len2}")
307
  logger.debug(" len1 (ylim): %s, len2 (xlim): %s", len1, len2)
308
  if debug:
309
  print(f" len1 (ylim): {len1}, len2 (xlim): {len2}")
 
340
  fig.suptitle(f"alignment projection\n(eps={eps}, min_samples={min_samples})")
341
 
342
  _ = DBSCAN(min_samples=min_samples, eps=eps).fit(df_).labels_ > -1
343
+
344
  # _x = DBSCAN(min_samples=min_samples, eps=eps).fit(df_).labels_ < 0
345
  _x = ~_
346
 
 
360
  )
361
 
362
  plt_loc = "img/plt.png"
363
+ ic(f" plotting to {plt_loc}")
364
  plt.savefig(plt_loc)
365
 
366
  # clustered
 
382
  df_aligned = df_aligned[["text2", "text1", "likelihood"]]
383
  df_aligned.columns = ["text1", "text2", "likelihood"]
384
 
385
+ ic(df_aligned.head())
386
+
387
  # round the last column to 2
388
  # df_aligned.likelihood = df_aligned.likelihood.round(2)
389
  # df_aligned = df_aligned.round({"likelihood": 2})
 
433
  # output_plot: gr.outputs.Image(type="auto", label="...")
434
  # return df_trimmed, output_plot, file_dl, file_dl_xlsx, df_aligned
435
  # return df_trimmed, output_plot, file_dl, file_dl_xlsx, styled, df_html # gradio cant handle style
436
+
437
+ ic("returning outputs")
438
+
439
  return df_trimmed, output_plot, file_dl, file_dl_xlsx, df_aligned, df_html
440
 
441
  # modi outputs
radiobee/interpolate_pset.py CHANGED
@@ -1,4 +1,5 @@
1
  """Interpolate np.nan."""
 
2
  from typing import List, Tuple
3
  import numpy as np
4
  import pandas as pd
 
1
  """Interpolate np.nan."""
2
+ # pylint: disable=invalid-name
3
  from typing import List, Tuple
4
  import numpy as np
5
  import pandas as pd
radiobee/lists2cmat.py CHANGED
@@ -1,5 +1,6 @@
1
  """Convert two lists of str (texts) to correlation matrix."""
2
- # from typing import Dict, Iterable, Optional, Union
 
3
  from typing import Dict, Iterable, List, Optional, Union # noqa
4
 
5
  import numpy as np
@@ -32,6 +33,26 @@ def lists2cmat(
32
  vocabulary_terms: Optional[Union[Dict[str, int], Iterable[str]]] = None
33
  ) -> np.ndarray:
34
  # fmt: on
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  if isinstance(text1, str):
36
  text1 = [text1]
37
  if isinstance(text2, str):
 
1
  """Convert two lists of str (texts) to correlation matrix."""
2
+ # pylint: disable=too-many-arguments, too-many-locals, unused-import
3
+
4
  from typing import Dict, Iterable, List, Optional, Union # noqa
5
 
6
  import numpy as np
 
33
  vocabulary_terms: Optional[Union[Dict[str, int], Iterable[str]]] = None
34
  ) -> np.ndarray:
35
  # fmt: on
36
+ """Convert two lists to cmat.
37
+
38
+ Args:
39
+ text1: refer smatrix
40
+ text2: refer smatrix
41
+ lang1: optional 1st lang code
42
+ lang2: optional 2nd lang code
43
+ dl_type: doc lenth
44
+ idf_type: idf tyoe
45
+ max_df: max doc freq
46
+ max_n_terms: max n terms
47
+ min_df: min doc freq
48
+ model: optional model
49
+ norm: norm
50
+ tf_type: term freq type
51
+ vocabulary_terms: vocab refer smatrix
52
+
53
+ Returs
54
+ cmat
55
+ """
56
  if isinstance(text1, str):
57
  text1 = [text1]
58
  if isinstance(text2, str):
radiobee/loadtext.py CHANGED
@@ -1,5 +1,4 @@
1
- """
2
- Load file content to text.
3
 
4
  Check encoding and load a file to text.
5
 
@@ -16,6 +15,8 @@ magic.from_file("testdata/test.pdf")
16
  original load_textrev
17
  refer to load_paras.py
18
  """
 
 
19
  from typing import Optional, Union # noqa
20
  from pathlib import Path
21
  import cchardet
@@ -34,7 +35,7 @@ def loadtext(filepath: Union[Path, str] = "") -> str:
34
  if not filepath.is_file():
35
  logger.error(" file [%s] does not exist or is not a file.", filepath)
36
  # return None
37
- raise Exception(" file [%s] does not exist or is not a file." % filepath)
38
 
39
  # encoding = detect_file(filepath)
40
  encoding = cchardet.detect(filepath.read_bytes()).get("encoding", "utf8")
@@ -44,7 +45,7 @@ def loadtext(filepath: Union[Path, str] = "") -> str:
44
 
45
  # cchardet: 'GB18030', no need for errors="ignore"
46
  try:
47
- text = filepath.read_text(encoding, errors="ignore")
48
  except Exception as exc:
49
  logger.error(" Opening %s resulted in errors: %s", filepath, exc)
50
  raise
@@ -53,8 +54,7 @@ def loadtext(filepath: Union[Path, str] = "") -> str:
53
 
54
 
55
  def test1():
56
- r"""
57
- Tests default file.
58
 
59
  defaultdir = r'D:\dl\Dropbox\mat-dir\snippets-mat\pyqt'
60
  defaultfile = r'notes pyqt tkinter tktable.txt'
@@ -69,10 +69,11 @@ def test1():
69
 
70
 
71
  def testgb():
72
- r"""
73
- Tests D:\dl\Dropbox\shuangyu_ku\txt-books\19部世界名著中英文对照版TXT
74
- """
75
- file = r"C:\dl\Dropbox\shuangyu_ku\txt-books\19部世界名著中英文对照版TXT" r"\爱丽丝漫游奇境记.txt"
 
76
  text = loadtext(file)
77
  if text:
78
  # assert len(text) == 190913
@@ -84,10 +85,8 @@ def testgb():
84
  assert text0 == text[:500]
85
 
86
 
87
- def testUTF_16LE():
88
- r"""
89
- Test 'E:\\beta_final_version\\build\\test_files\\files_for_testing_import\\Folding_Beijing_12.txt'.
90
- """
91
  # file = 'E:\\beta_final_version\\build\\test_files\\files_for_testing_import\\Folding_Beijing_12.txt' # NOQA
92
  file = r"C:\dl\Dropbox\mat-dir\snippets-mat\pyqt\Sandbox\hp_beta-version_files\test_files\files_for_testing_import\Folding_Beijing_12.txt" # NOQA
93
  file = r"C:\dl\Dropbox\mat-dir\pyqt\Sandbox\hp_beta-version_files\test_files\files_for_testing_import\Folding_Beijing_12.txt"
 
1
+ """Load file content to text.
 
2
 
3
  Check encoding and load a file to text.
4
 
 
15
  original load_textrev
16
  refer to load_paras.py
17
  """
18
+ # pylint: disable=line-too-long, unused-variable, unused-import
19
+
20
  from typing import Optional, Union # noqa
21
  from pathlib import Path
22
  import cchardet
 
35
  if not filepath.is_file():
36
  logger.error(" file [%s] does not exist or is not a file.", filepath)
37
  # return None
38
+ raise Exception(" file [{filepath}] does not exist or is not a file.")
39
 
40
  # encoding = detect_file(filepath)
41
  encoding = cchardet.detect(filepath.read_bytes()).get("encoding", "utf8")
 
45
 
46
  # cchardet: 'GB18030', no need for errors="ignore"
47
  try:
48
+ text = filepath.read_text(encoding=encoding, errors="ignore")
49
  except Exception as exc:
50
  logger.error(" Opening %s resulted in errors: %s", filepath, exc)
51
  raise
 
54
 
55
 
56
  def test1():
57
+ r"""Tests default file.
 
58
 
59
  defaultdir = r'D:\dl\Dropbox\mat-dir\snippets-mat\pyqt'
60
  defaultfile = r'notes pyqt tkinter tktable.txt'
 
69
 
70
 
71
  def testgb():
72
+ r"""Tests shuangyu_ku\txt-books\19部世界名著中英文对照版TXT."""
73
+ file = (
74
+ r"C:\dl\Dropbox\shuangyu_ku\txt-books\19部世界名著中英文对照版TXT"
75
+ r"\爱丽丝漫游奇境记.txt"
76
+ )
77
  text = loadtext(file)
78
  if text:
79
  # assert len(text) == 190913
 
85
  assert text0 == text[:500]
86
 
87
 
88
+ def test_utf_16le():
89
+ r"""Test 'E:\\beta_final_version\\build\\test_files\\files_for_testing_import\\Folding_Beijing_12.txt'."""
 
 
90
  # file = 'E:\\beta_final_version\\build\\test_files\\files_for_testing_import\\Folding_Beijing_12.txt' # NOQA
91
  file = r"C:\dl\Dropbox\mat-dir\snippets-mat\pyqt\Sandbox\hp_beta-version_files\test_files\files_for_testing_import\Folding_Beijing_12.txt" # NOQA
92
  file = r"C:\dl\Dropbox\mat-dir\pyqt\Sandbox\hp_beta-version_files\test_files\files_for_testing_import\Folding_Beijing_12.txt"
radiobee/mdx_e2c.py CHANGED
@@ -3,6 +3,7 @@
3
  mdx_e2c = joblib.load("./mdx_dict_e2c.lzma")
4
  mdx_c2e = joblib.load("./mdx_dict_e2c.lzma")
5
  """
 
6
  from pathlib import Path
7
  from string import punctuation
8
  import joblib
 
3
  mdx_e2c = joblib.load("./mdx_dict_e2c.lzma")
4
  mdx_c2e = joblib.load("./mdx_dict_e2c.lzma")
5
  """
6
+ # pylint: disable=invalid-name,
7
  from pathlib import Path
8
  from string import punctuation
9
  import joblib
radiobee/model_s.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Load model_s."""
2
+ # pylint: disable=invalid-name
3
+
4
+ from pathlib import Path
5
+
6
+ import joblib
7
+ from huggingface_hub import hf_hub_url, cached_download # hf_hub_download,
8
+ from alive_progress import alive_bar
9
+ from logzero import logger
10
+
11
+
12
+ def load_model_s():
13
+ """Load local model_s if present, else fetch from hf.co."""
14
+ file_loc = "radiobee/model_s"
15
+ if Path(file_loc).exists():
16
+ # raise Exception(f"File {file_loc} does not exist.")
17
+
18
+ with alive_bar(1, title=" Loading model_s, takes ~30 secs ...", length=3) as progress_bar:
19
+ model = joblib.load(file_loc)
20
+
21
+ # model_s = pickle.load(open(file_loc, "rb"))
22
+ progress_bar() # pylint: disable=not-callable
23
+
24
+ return model
25
+
26
+ logger.info(
27
+ "Fetching and caching model_s from huggingface.co... "
28
+ "The first time may take a while depending on your net."
29
+ )
30
+ with alive_bar(1, title=" Subsequent loading takes ~20 secs ...", length=3) as progress_bar:
31
+ model = joblib.load(cached_download(hf_hub_url("mikeee/model_s", "model_s")))
32
+ progress_bar() # pylint: disable=not-callable
33
+
34
+ return model
35
+
36
+
37
+ model_s = load_model_s()
radiobee/paras2sents.py ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Convert paras to sents."""
2
+ # pylint: disable=unused-import, too-many-branches, ungrouped-imports
3
+
4
+ from typing import Callable, List, Optional, Tuple, Union
5
+
6
+ from itertools import zip_longest
7
+ import numpy as np
8
+ import pandas as pd
9
+ from logzero import logger
10
+
11
+ from radiobee.align_sents import align_sents
12
+ from radiobee.seg_text import seg_text
13
+ from radiobee.detect import detect
14
+
15
+ try:
16
+ from radiobee.shuffle_sents import shuffle_sents
17
+ except Exception as exc:
18
+ logger.error("shuffle_sents not available: %s, using align_sents", exc)
19
+ shuffle_sents = lambda x1, x2, lang1="", lang2="": align_sents(x1, x2) # noqa
20
+
21
+
22
+ def paras2sents(
23
+ paras_: Union[pd.DataFrame, List[Tuple[str, str, Union[str, float]]], np.ndarray],
24
+ align_func: Optional[Union[Callable, str]] = None,
25
+ lang1: Optional[str] = None,
26
+ lang2: Optional[str] = None,
27
+ ) -> List[Tuple[str, str, Union[str, float]]]:
28
+ """Convert paras to sents using align_func.
29
+
30
+ Args:
31
+ paras_: list of 3-tuples or numpy or pd.DataFrame
32
+ lang1: fisrt lang code
33
+ lang2: second lang code
34
+ align_func: func used in the sent level
35
+ if set to None, default to align_sents
36
+ Returns:
37
+ list of sents (possible with likelihood for shuffle_sents)
38
+ """
39
+ # wrap everything in pd.DataFrame
40
+ # necessary to make pyright happy
41
+ paras = pd.DataFrame(paras_).fillna("")
42
+
43
+ # take the first three columns at maximum
44
+ paras = paras.iloc[:, :3]
45
+
46
+ if len(paras.columns) < 2:
47
+ logger.error(
48
+ "Need at least two columns, got %s",
49
+ len(paras.columns)
50
+ )
51
+ raise Exception("wrong data")
52
+
53
+ # append the third col (all "") if there are only two cols
54
+ if len(paras.columns) < 3:
55
+ paras.insert(2, "likelihood", [""] * len(paras))
56
+
57
+ if lang1 is None:
58
+ lang1 = detect(" ".join(paras.iloc[:, 0]))
59
+ if lang2 is None:
60
+ lang2 = detect(" ".join(paras.iloc[:, 1]))
61
+
62
+ left, right = [], []
63
+ row0, row1 = [], []
64
+ for elm0, elm1, elm2 in paras.values:
65
+ sents0 = seg_text(elm0, lang1)
66
+ sents1 = seg_text(elm1, lang2)
67
+ if isinstance(elm2, float) and elm2 > 0:
68
+ if row0 or row1:
69
+ left.append(row0)
70
+ right.append(row1)
71
+ row0, row1 = [], [] # collect and prepare
72
+
73
+ if sents0:
74
+ left.append(sents0)
75
+ if sents1:
76
+ right.append(sents1)
77
+ else:
78
+ if sents0:
79
+ row0.extend(sents0)
80
+ if sents1:
81
+ row1.extend(sents1)
82
+ # collect possible last batch
83
+ if row0 or row1:
84
+ left.append(row0)
85
+ right.append(row1)
86
+
87
+ # res = [*zip(left, right)]
88
+
89
+ # align each batch using align_func
90
+
91
+ # ready align_func
92
+ if align_func is None:
93
+ align_func = align_sents
94
+ if isinstance(align_func, str) and align_func.startswith("shuffle") or not isinstance(align_func, str) and align_func.__name__ in ["shuffle_sents"]:
95
+ align_func = lambda row0, row1: shuffle_sents(row0, row1, lang1=lang1, lang2=lang2) # noqa
96
+ else:
97
+ align_func = align_sents
98
+
99
+ res = []
100
+ for row0, row1 in zip(left, right):
101
+ try:
102
+ _ = align_func(row0, row1)
103
+ except Exception as exc:
104
+ logger.error("errors: %s, resorting to zip_longest", exc)
105
+ _ = [*zip_longest(row0, row1, fillvalue="")]
106
+
107
+ # res.append(_)
108
+ res.extend(_)
109
+
110
+ return res
radiobee/plot_cmat.py CHANGED
@@ -1,5 +1,6 @@
1
  """Plot pandas.DataFrame with DBSCAN clustering."""
2
- # pylint: disable=invalid-name, too-many-arguments
 
3
  import numpy as np
4
  import pandas as pd
5
  import matplotlib
@@ -37,13 +38,13 @@ def plot_cmat(
37
  backend: str = "Agg",
38
  showfig: bool = False,
39
  ):
40
- # ) -> plt:
41
  # fmt: on
42
  """Plot df with DBSCAN clustering.
43
 
44
  Args:
45
  df_: pandas.DataFrame, with three columns columns=["x", "y", "cos"]
46
- Returns:
 
47
  matplotlib.pyplot: for possible use in gradio
48
 
49
  plot_df(pd.DataFrame(cmat2tset(smat), columns=['x', 'y', 'cos']))
 
1
  """Plot pandas.DataFrame with DBSCAN clustering."""
2
+ # pylint: disable=invalid-name, too-many-arguments, too-many-locals
3
+
4
  import numpy as np
5
  import pandas as pd
6
  import matplotlib
 
38
  backend: str = "Agg",
39
  showfig: bool = False,
40
  ):
 
41
  # fmt: on
42
  """Plot df with DBSCAN clustering.
43
 
44
  Args:
45
  df_: pandas.DataFrame, with three columns columns=["x", "y", "cos"]
46
+
47
+ Returns
48
  matplotlib.pyplot: for possible use in gradio
49
 
50
  plot_df(pd.DataFrame(cmat2tset(smat), columns=['x', 'y', 'cos']))
radiobee/plot_df.py CHANGED
@@ -1,5 +1,5 @@
1
  """Plot pandas.DataFrame with DBSCAN clustering."""
2
- # pylint: disable=invalid-name, too-many-arguments
3
  import numpy as np # noqa
4
  import pandas as pd
5
  import matplotlib
@@ -38,6 +38,7 @@ def plot_df(
38
 
39
  Args:
40
  df_: pandas.DataFrame, with three columns columns=["x", "y", "cos"]
 
41
  Returns:
42
  matplotlib.pyplot: for possible use in gradio
43
 
 
1
  """Plot pandas.DataFrame with DBSCAN clustering."""
2
+ # pylint: disable=invalid-name, too-many-arguments, unused-import
3
  import numpy as np # noqa
4
  import pandas as pd
5
  import matplotlib
 
38
 
39
  Args:
40
  df_: pandas.DataFrame, with three columns columns=["x", "y", "cos"]
41
+
42
  Returns:
43
  matplotlib.pyplot: for possible use in gradio
44
 
radiobee/process_upload.py CHANGED
@@ -1,4 +1,5 @@
1
  """Process uploads."""
 
2
  from typing import Union
3
 
4
  from pathlib import Path
@@ -51,7 +52,7 @@ def process_upload(upload: Union[tempfile._TemporaryFileWrapper, bytes]) -> str:
51
 
52
  if encoding is not None:
53
  try:
54
- text = fpath.read_text(encoding)
55
  except Exception as e:
56
  logger.error("Unable to retrieve text, error: %s", e)
57
  text = str(e)
@@ -63,7 +64,7 @@ def process_upload(upload: Union[tempfile._TemporaryFileWrapper, bytes]) -> str:
63
  # not able to cchardet: encoding is None, docx, pdf, epub, zip etc
64
  logger.info("Trying docx...to be implemented")
65
 
66
- # TODO
67
 
68
  _ = Path(upload.name)
69
  msg = f"binary file: {_.stem[:-8]}{_.suffix}"
 
1
  """Process uploads."""
2
+ # pylint: disable=invalid-name, unused-import
3
  from typing import Union
4
 
5
  from pathlib import Path
 
52
 
53
  if encoding is not None:
54
  try:
55
+ text = fpath.read_text(encoding=encoding)
56
  except Exception as e:
57
  logger.error("Unable to retrieve text, error: %s", e)
58
  text = str(e)
 
64
  # not able to cchardet: encoding is None, docx, pdf, epub, zip etc
65
  logger.info("Trying docx...to be implemented")
66
 
67
+ # T ODO .docx .epub .mobi .pdf etc.
68
 
69
  _ = Path(upload.name)
70
  msg = f"binary file: {_.stem[:-8]}{_.suffix}"
radiobee/seg_text.py CHANGED
@@ -97,6 +97,8 @@ def seg_text(
97
 
98
  Arguments:
99
  lst: text or text list
 
 
100
  extra: re.split(rf"{extra}, text) first
101
  Returns:
102
  list of splitted text.
 
97
 
98
  Arguments:
99
  lst: text or text list
100
+ lang: optional lang code
101
+ maxlines: (default 1000), threshold for turn on tqdm progressbar, set to <1 or a large number to turn it off
102
  extra: re.split(rf"{extra}, text) first
103
  Returns:
104
  list of splitted text.
radiobee/shuffle_sents.py CHANGED
@@ -1,8 +1,9 @@
1
  """Shuffle sents."""
2
- # pylint: disable=
3
 
4
  from typing import List, Optional, Tuple, Union
5
 
 
6
  from fastlid import fastlid
7
  from logzero import logger # noqa
8
 
@@ -26,12 +27,23 @@ def shuffle_sents(
26
  lang2: Optional[str] = None,
27
  ) -> List[Tuple[str, str, Union[str, float]]]:
28
  # fmt: on
29
- """shuffle sents to the right positions.
30
 
31
  Based on __main__.py.
 
 
 
 
 
 
 
 
 
32
  """
33
  set_languages = fastlid.set_languages
34
- fastlid.set_languages = ["en", "zh"]
 
 
35
  if lang1 is None:
36
  lang1, _ = fastlid(" ".join(lst1))
37
  if lang2 is None:
@@ -40,16 +52,28 @@ def shuffle_sents(
40
  # restore fastlid.set_languages
41
  fastlid.set_languages = set_languages
42
 
43
- cmat = lists2cmat(
44
- lst1,
45
- lst2,
46
- tf_type=tf_type,
47
- idf_type=idf_type,
48
- dl_type=dl_type,
49
- norm=norm,
50
- lang1=lang1,
51
- lang2=lang2,
52
- )
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  pset = gen_pset(
55
  cmat,
@@ -63,6 +87,11 @@ def shuffle_sents(
63
 
64
  final_list = align_texts(aset, lst2, lst1)
65
 
66
- return final_list
 
 
 
 
 
67
 
68
- # return [("", "")]
 
1
  """Shuffle sents."""
2
+ # pylint: disable=unused-import, too-many-arguments, too-many-locals,
3
 
4
  from typing import List, Optional, Tuple, Union
5
 
6
+ import pandas as pd
7
  from fastlid import fastlid
8
  from logzero import logger # noqa
9
 
 
27
  lang2: Optional[str] = None,
28
  ) -> List[Tuple[str, str, Union[str, float]]]:
29
  # fmt: on
30
+ """Shuffle sents to the right positions.
31
 
32
  Based on __main__.py.
33
+
34
+ eps: float = 6
35
+ min_samples: int = 4
36
+ tf_type: str = "linear"
37
+ idf_type: Optional[str] = None
38
+ dl_type: Optional[str] = None
39
+ norm: Optional[str] = None
40
+ lang1: Optional[str] = "en"
41
+ lang2: Optional[str] = "zh"
42
  """
43
  set_languages = fastlid.set_languages
44
+ # fastlid.set_languages = ["en", "zh"]
45
+ fastlid.set_languages = None
46
+
47
  if lang1 is None:
48
  lang1, _ = fastlid(" ".join(lst1))
49
  if lang2 is None:
 
52
  # restore fastlid.set_languages
53
  fastlid.set_languages = set_languages
54
 
55
+ lang_dicts = ["en", "zh"]
56
+ if lang1 in lang_dicts and lang2 in lang_dicts:
57
+ cmat = lists2cmat(
58
+ lst1,
59
+ lst2,
60
+ tf_type=tf_type,
61
+ idf_type=idf_type,
62
+ dl_type=dl_type,
63
+ norm=norm,
64
+ lang1=lang1,
65
+ lang2=lang2,
66
+ )
67
+ else: # use model_s
68
+ from radiobee.model_s import model_s # pylint: disable=import-outside-toplevel
69
+ vec1 = model_s.encode(lst1)
70
+ vec2 = model_s.encode(lst2)
71
+ # cmat = vec1.dot(vec2.T)
72
+ cmat = vec2.dot(vec1.T)
73
+
74
+ shuffle_sents.cmat = cmat
75
+ shuffle_sents.lang1 = lang1
76
+ shuffle_sents.lang2 = lang2
77
 
78
  pset = gen_pset(
79
  cmat,
 
87
 
88
  final_list = align_texts(aset, lst2, lst1)
89
 
90
+ # return final_list
91
+
92
+ # swap columns 0, 1
93
+ _ = pd.DataFrame(final_list)
94
+
95
+ _ = _.iloc[:, [1, 0] + [*range(2, _.shape[1])]]
96
 
97
+ return _.to_numpy().tolist()
radiobee/smatrix.py CHANGED
@@ -3,13 +3,16 @@
3
  refer also to fast-scores fast_scores.py and gen_model.py (sklearn.feature_extraction.text.TfidfVectorizer).
4
  originally docterm_scores.py.
5
  """
 
 
6
  from typing import Dict, Iterable, Optional, Union
7
- import numpy as np
8
  from itertools import chain
 
9
  from psutil import virtual_memory
10
  from more_itertools import ilen
11
 
12
  from textacy.representations import Vectorizer
 
13
  # from textacy.representations.vectorizers import Vectorizer
14
  from logzero import logger
15
 
@@ -51,8 +54,8 @@ def smatrix(
51
  for xelm in iter(doc1):
52
  for elm in iter(xelm):
53
  assert isinstance(elm, str)
54
- except AssertionError:
55
- raise AssertionError(" doc1 is not of the typing Iterable[Iterable[str]] ")
56
  except Exception as e:
57
  logger.error(e)
58
  raise
@@ -60,8 +63,8 @@ def smatrix(
60
  for xelm in iter(doc2):
61
  for elm in iter(xelm):
62
  assert isinstance(elm, str)
63
- except AssertionError:
64
- raise AssertionError(" doc2 is not of the typing Iterable[Iterable[str]] ")
65
  except Exception as e:
66
  logger.error(e)
67
  raise
 
3
  refer also to fast-scores fast_scores.py and gen_model.py (sklearn.feature_extraction.text.TfidfVectorizer).
4
  originally docterm_scores.py.
5
  """
6
+ # pylint: disable=invalid-name, too-many-locals, too-many-arguments
7
+
8
  from typing import Dict, Iterable, Optional, Union
 
9
  from itertools import chain
10
+ import numpy as np
11
  from psutil import virtual_memory
12
  from more_itertools import ilen
13
 
14
  from textacy.representations import Vectorizer
15
+
16
  # from textacy.representations.vectorizers import Vectorizer
17
  from logzero import logger
18
 
 
54
  for xelm in iter(doc1):
55
  for elm in iter(xelm):
56
  assert isinstance(elm, str)
57
+ except AssertionError as exc:
58
+ raise AssertionError(" doc1 is not of the typing Iterable[Iterable[str]] ") from exc
59
  except Exception as e:
60
  logger.error(e)
61
  raise
 
63
  for xelm in iter(doc2):
64
  for elm in iter(xelm):
65
  assert isinstance(elm, str)
66
+ except AssertionError as exc:
67
+ raise AssertionError(" doc2 is not of the typing Iterable[Iterable[str]] ") from exc
68
  except Exception as e:
69
  logger.error(e)
70
  raise
radiobee/text2lists.py CHANGED
@@ -1,5 +1,6 @@
1
  """Separate text to zh en lists."""
2
- # pylint: disable=
 
3
 
4
  # from typing import Tuple,
5
  from typing import Iterable, List, Optional, Tuple, Union # noqa
 
1
  """Separate text to zh en lists."""
2
+ # pylint: disable=unused-import, too-many-locals, invalid-name, too-many-branches, too-many-statements,
3
+
4
 
5
  # from typing import Tuple,
6
  from typing import Iterable, List, Optional, Tuple, Union # noqa
requirements.in ADDED
File without changes
requirements.txt CHANGED
@@ -23,4 +23,7 @@ pyicu
23
  pycld2
24
  tqdm
25
  polyglot
26
- sentence_splitter
 
 
 
 
23
  pycld2
24
  tqdm
25
  polyglot
26
+ sentence_splitter
27
+ icecream
28
+ # lazy
29
+ alive-progress
rsyn-to-radiobee-aligner.bat ADDED
@@ -0,0 +1 @@
 
 
1
+ rsync -uvazn ./ ..\radiobee-aligner/ --exclude-from=exclude-from
run-pydocstyle.bat ADDED
@@ -0,0 +1 @@
 
 
1
+ pydocstyle --convention=google radiobee tests
run-pylint.bat ADDED
@@ -0,0 +1 @@
 
 
1
+ pylint radiobee -d duplicate-code
tests/test_align_sents.py CHANGED
@@ -1,9 +1,14 @@
1
  """Test align_sents."""
2
  from radiobee.align_sents import align_sents
 
3
 
 
 
 
4
 
5
- def test_align_sents():
6
- """Test align_sents."""
 
7
  lst1, lst2 = [
8
  "a",
9
  "bs",
@@ -11,3 +16,56 @@ def test_align_sents():
11
  res = align_sents(lst1, lst2)
12
 
13
  assert res == [("a", "aaa"), ("a", "34"), ("bs", "a"), ("bs", "b")]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  """Test align_sents."""
2
  from radiobee.align_sents import align_sents
3
+ from radiobee.seg_text import seg_text
4
 
5
+ text1 = """`Wretched inmates!' I ejaculated mentally, `you deserve perpetual isolation from your species for your churlish inhospitality. At least, I would not keep my doors barred in the day time. I don't care--I will get in!' So resolved, I grasped the latch and shook it vehemently. Vinegar-faced Joseph projected his head from a round window of the barn."""
6
+ text2 = """“被囚禁的囚犯!”我在精神上被射精,“你应该永远与你的物种隔绝,因为你这种粗鲁的病态。至少,我白天不会锁门,我不在乎,我进去了!”我决心如此,我抓住了门锁,狠狠地摇了一下。醋脸的约瑟夫从谷仓的圆窗朝他的头照射。"""
7
+ text3 = """"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit. Zumindest würde ich meine Türen tagsüber nicht verriegeln. Das ist mir egal - ich werde reinkommen!' So entschlossen, ergriff ich die Klinke und rüttelte heftig daran. Der essiggesichtige Joseph streckte seinen Kopf aus einem runden Fenster der Scheune."""
8
 
9
+
10
+ def test_align_sents_sanity():
11
+ """Test align_sents sanity check."""
12
  lst1, lst2 = [
13
  "a",
14
  "bs",
 
16
  res = align_sents(lst1, lst2)
17
 
18
  assert res == [("a", "aaa"), ("a", "34"), ("bs", "a"), ("bs", "b")]
19
+
20
+
21
+ def test_align_sents_en_zh():
22
+ """Test align_sents en-zh."""
23
+ sents_en = seg_text(text1)
24
+ sents_zh = seg_text(text2)
25
+
26
+ # 9ms vs shuffle_sents 50ms shuffle_sents wth lang1lang2 40ms
27
+ res = align_sents(sents_en, sents_zh)
28
+
29
+ _ = """res[2:4]
30
+ Out[26]:
31
+ [('At least, I would not keep my doors barred in the day time.',
32
+ '至少,我白天不会锁门,我不在乎,我进去了!”'),
33
+ ("I don't care--I will get in!'", '至少,我白天不会锁门,我不在乎,我进去了!”')]
34
+ """
35
+ assert "至少" in str(res[2])
36
+ assert "至少" in str(res[3])
37
+
38
+
39
+ def test_align_sents_en_de():
40
+ """Test align_sents en-zh."""
41
+ sents_en = seg_text(text1)
42
+ sents_de = seg_text(text3)
43
+
44
+ res1 = align_sents(sents_en, sents_de)
45
+ _ = """In [48]: res1[:2]
46
+ Out[48]:
47
+ [("`Wretched inmates!'",
48
+ '"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit.'),
49
+ ('I ejaculated mentally, `you deserve perpetual isolation from your species for your churlish inhospitality.',
50
+ '"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit.')]
51
+ """
52
+ assert "Elende" in str(res1[0])
53
+ assert "Elende" in str(res1[1])
54
+
55
+
56
+ _ = """
57
+ [("`Wretched inmates!'",
58
+ '"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit.'),
59
+ ('I ejaculated mentally, `you deserve perpetual isolation from your species for your churlish inhospitality.',
60
+ '"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit.'),
61
+ ('At least, I would not keep my doors barred in the day time.',
62
+ 'Zumindest würde ich meine Türen tagsüber nicht verriegeln.'),
63
+ ("I don't care--I will get in!'",
64
+ "Das ist mir egal - ich werde reinkommen!'"),
65
+ ('So resolved, I grasped the latch and shook it vehemently.',
66
+ 'So entschlossen, ergriff ich die Klinke und rüttelte heftig daran.'),
67
+ ('Vinegar-faced Joseph projected his head from a round window of the barn.',
68
+ 'Der essiggesichtige Joseph streckte seinen Kopf aus einem runden Fenster der Scheune.')]
69
+
70
+
71
+ """
tests/test_lists2cmat_hlm.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Test lists2cmat."""
2
+ # pylint: disable=invalid-name
3
+
4
+ from itertools import zip_longest
5
+ from fastlid import fastlid
6
+ from radiobee.loadtext import loadtext
7
+ from radiobee.lists2cmat import lists2cmat
8
+
9
+ file1 = "data/test_en.txt"
10
+ file2 = "data/test_zh.txt"
11
+ file1 = "data/hlm-ch1-en.txt"
12
+ file2 = "data/hlm-ch1-zh.txt"
13
+
14
+ # assume English or Chinese
15
+ fastlid.set_languages = ["en", "zh", ]
16
+
17
+ text1 = loadtext(file1)
18
+ text2 = loadtext(file2)
19
+
20
+ lang1, _ = fastlid(text1)
21
+ lang2, _ = fastlid(text2)
22
+
23
+
24
+ def test_lists2cmat_hlm():
25
+ """Test lists2cmat."""
26
+
27
+ lst1, lst2 = [], []
28
+
29
+ if text1:
30
+ lst1 = [_.strip() for _ in text1.splitlines() if _.strip()]
31
+ if text2:
32
+ lst2 = [_.strip() for _ in text2.splitlines() if _.strip()]
33
+
34
+ # en zh
35
+ len(lst1) == 135, len(lst2) == 55
36
+
37
+ # cmat = texts2cmat(lst1, lst2, lang1, lang2)
38
+ cmat = lists2cmat(lst1, lst2, lang1, lang2)
39
+
40
+ assert cmat.shape == (55, 135)
41
+
42
+ cmat21 = lists2cmat(lst2, lst1, lang2, lang1)
43
+
44
+ assert cmat21.shape == (135, 55)
45
+ assert lists2cmat(lst2, lst1).mean() > 0.05 # 0.09
tests/test_paras2sents.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Test paras2sents."""
2
+ # pylint: disable=invalid-name
3
+
4
+ import pandas as pd
5
+ from radiobee.paras2sents import paras2sents
6
+ from radiobee.shuffle_sents import shuffle_sents
7
+
8
+ file_loc = r"data/test-dual-zh-en.xlsx"
9
+ paras = pd.read_excel(file_loc, header=0)
10
+ paras = paras[["text1", "text2", "likelihood"]].fillna("")
11
+
12
+
13
+ def test_paras2sents_dual():
14
+ """Test paras2sents_dual."""
15
+ sents = paras2sents(paras)
16
+
17
+ assert len(sents) > 202 # 208
18
+ # assert not sents
19
+
20
+
21
+ def test_paras2sents_dual_model_s():
22
+ """Test paras2sents_dual_model_s."""
23
+ sents = paras2sents(paras, shuffle_sents)
24
+
25
+ assert len(sents) > 201 # 207
26
+ # assert not sents
27
+
28
+
29
+ _ = """
30
+ df = pd.DataFrame(
31
+ [list(sent) + [""] if len(sent) == 2 else list(sent) for sent in sents]
32
+ ).fillna("")
33
+
34
+ """
tests/test_shuffle_sents.py ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Test shuffle_sents.
2
+
3
+ eps: float = 6
4
+ min_samples: int = 4
5
+ tf_type: str = "linear"
6
+ idf_type: Optional[str] = None
7
+ dl_type: Optional[str] = None
8
+ norm: Optional[str] = None
9
+ lang1: Optional[str] = "en"
10
+ lang2: Optional[str] = "zh"
11
+ """
12
+ from radiobee.seg_text import seg_text
13
+ from radiobee.shuffle_sents import shuffle_sents
14
+ from radiobee.align_sents import align_sents
15
+
16
+ text1 = """`Wretched inmates!' I ejaculated mentally, `you deserve perpetual isolation from your species for your churlish inhospitality. At least, I would not keep my doors barred in the day time. I don't care--I will get in!' So resolved, I grasped the latch and shook it vehemently. Vinegar-faced Joseph projected his head from a round window of the barn."""
17
+ text2 = """“被囚禁的囚犯!”我在精神上被射精,“你应该永远与你的物种隔绝,因为你这种粗鲁的病态。至少,我白天不会锁门,我不在乎,我进去了!”我决心如此,我抓住了门锁,狠狠地摇了一下。醋脸的约瑟夫从谷仓的圆窗朝他的头照射。"""
18
+ text3 = """"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit. Zumindest würde ich meine Türen tagsüber nicht verriegeln. Das ist mir egal - ich werde reinkommen!' So entschlossen, ergriff ich die Klinke und rüttelte heftig daran. Der essiggesichtige Joseph streckte seinen Kopf aus einem runden Fenster der Scheune."""
19
+
20
+
21
+ def test_shuffle_sents_en_zh():
22
+ """Test shuffle_sents_en_zh."""
23
+ sents_en = seg_text(text1)
24
+ sents_zh = seg_text(text2)
25
+
26
+ lang1 = "en"
27
+ lang2 = "zh"
28
+
29
+ pairs = shuffle_sents(sents_en, sents_zh)
30
+ pairs_ = shuffle_sents(sents_en, sents_zh, lang1=lang1, lang2=lang2)
31
+
32
+ # pairs[3] == ('', "I don't care--I will get in!'", '')
33
+ assert pairs == pairs_
34
+
35
+ # assert not pairs[3][0]
36
+ # after swapping
37
+ assert not pairs[3][1]
38
+
39
+
40
+ def test_shuffle_sents_en_de():
41
+ """Test shuffle_sents_en_de."""
42
+ sents_en = seg_text(text1)
43
+ sents_de = seg_text(text3)
44
+
45
+ lang1 = "en"
46
+ lang2 = "de"
47
+
48
+ pairs = shuffle_sents(sents_en, sents_de)
49
+ pairs_ = shuffle_sents(sents_en, sents_de, lang1=lang1, lang2=lang2)
50
+
51
+ assert pairs == pairs_
52
+
53
+ #
54
+ # assert not pairs[3][0]
55
+ _ = """In [218]: pairs[:2]
56
+ Out[218]:
57
+ [["`Wretched inmates!'", '', ''],
58
+ ['I ejaculated mentally, `you deserve perpetual isolation from your species for your churlish inhospitality.',
59
+ '"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit.',
60
+ 0.62]]
61
+ """
62
+ assert not pairs[0][1]
63
+ assert "mentally" in str(pairs[1]) and "Elende" in str(pairs[1])
64
+
65
+ # [elm[2] for elm in pairs]
66
+ # ['', 0.62, 0.72, 0.74, 0.68, 0.79]
67
+ if isinstance(pairs[1][2], float):
68
+ assert pairs[1][2] > 0.6
69
+ if isinstance(pairs[2][2], float):
70
+ assert pairs[2][2] > 0.7
71
+ if isinstance(pairs[3][2], float):
72
+ assert pairs[3][2] > 0.7
73
+ if isinstance(pairs[4][2], float):
74
+ assert pairs[4][2] > 0.6
75
+ if isinstance(pairs[5][2], float):
76
+ assert pairs[5][2] > 0.7
77
+
78
+
79
+ _ = """
80
+ In [232]: shuffle_sents.cmat.round(2)
81
+ Out[232]:
82
+ array([[ 0.27, 0.62, 0.07, 0.11, 0.02, 0.02],
83
+ [ 0.03, 0.09, 0.72, 0.18, 0.07, -0.07],
84
+ [ 0.19, 0.07, 0.16, 0.74, -0.01, -0.02],
85
+ [-0.02, 0.18, 0.16, 0.06, 0.68, -0.04],
86
+ [ 0.02, 0.07, 0.04, -0.04, 0.02, 0.79]], dtype=float32)
87
+ pairs[1]
88
+ sents_en[1], sents_de[0], shuffle_sents.cmat[0, 1]
89
+ ['I ejaculated mentally, `you deserve perpetual isolation from your species for your churlish inhospitality.',
90
+ '"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit.',
91
+ 0.62]
92
+
93
+ pairs[2]
94
+ sents_en[2], sents_de[1], shuffle_sents.cmat[1, 2].round(2)
95
+ Out[244]:
96
+ ('At least, I would not keep my doors barred in the day time.',
97
+ 'Zumindest würde ich meine Türen tagsüber nicht verriegeln.',
98
+ 0.72)
99
+ ...
100
+
101
+ import mtplotlib
102
+ import matplotlib.pyplot as plt
103
+ import seaborn as sns
104
+
105
+ sns.set()
106
+ set_style("darkgrind")
107
+ plt.ion()
108
+
109
+ ali = shuffle_sents(sents_en, sents_de)
110
+ sns.heatmap(shuffle_sents.cmat, cmap="viridis_r").invert_yaxis()
111
+ ax = plt.gca()
112
+ ax.set_xlabel(shuffle_sents.lang1)
113
+ ax.set_ylabel(shuffle_sents.lang2)
114
+
115
+ ali == [["`Wretched inmates!'", '', ''],
116
+ ['I ejaculated mentally, `you deserve perpetual isolation from your species for your churlish inhospitality.',
117
+ '"Elende Insassen! ejakulierte ich im Geiste, "ihr verdient die ewige Isolation von eurer Spezies für eure rüpelhafte Ungastlichkeit.',
118
+ 0.62],
119
+ ['At least, I would not keep my doors barred in the day time.',
120
+ 'Zumindest würde ich meine Türen tagsüber nicht verriegeln.',
121
+ 0.72],
122
+ ["I don't care--I will get in!'",
123
+ "Das ist mir egal - ich werde reinkommen!'",
124
+ 0.74],
125
+ ['So resolved, I grasped the latch and shook it vehemently.',
126
+ 'So entschlossen, ergriff ich die Klinke und rüttelte heftig daran.',
127
+ 0.68],
128
+ ['Vinegar-faced Joseph projected his head from a round window of the barn.',
129
+ 'Der essiggesichtige Joseph streckte seinen Kopf aus einem runden Fenster der Scheune.',
130
+ 0.79]]
131
+
132
+ res1 = align_sents(sents_en, sents_de)
133
+ ali = shuffle_sents(sents_en, sents_de)
134
+ for idx in range(1, 6):
135
+ assert res1[idx] == tuple(ali[idx][:2])
136
+ """
tests/test_text2lists.py CHANGED
@@ -4,18 +4,19 @@ from radiobee.loadtext import loadtext
4
  from radiobee.text2lists import text2lists
5
 
6
 
7
- def test_text2lists():
8
  """Test text2lists data\test-dual.txt."""
9
  filename = r"data\test-dual.txt"
10
  text = loadtext(filename) # noqa
11
  l1, l2 = text2lists(text)
12
  assert l2[0] in [""]
13
- assert "国际\n中\n双语" in l1[0]
 
14
 
15
 
16
  def test_shakespeare1000():
17
  """Separate first 1000.
18
-
19
  from pathlib import Path
20
  import zipfile
21
  dir_loc = r""
@@ -34,11 +35,11 @@ def test_shakespeare1000():
34
  break
35
  line += 1
36
  Path(f"data/shakespeare-zh-en-{numb_lines}.txt").write_text("\n".join(text1000), encoding="utf8")
37
-
38
  tset = cmat2test(cmat)
39
  df = pd.DataFrame(tset).rename(columns=dict(zip(range(0, 3), ['x', 'y', 'cos'])))
40
  plot_df(df)
41
-
42
  """
43
  # text1000a = Path("data/shakespeare-zh-en-1000.txt").read_text(encoding="utf8")
44
  # text2000 = Path("data/shakespeare-zh-en-1000.txt").read_text(encoding="utf8")
@@ -46,12 +47,12 @@ def test_shakespeare1000():
46
 
47
  # l1000a, l10002b = text2lists(text1000)
48
  # l2000a, l2000b = text2lists(text2000)
49
-
50
  l4000, r4000 = text2lists(text4000)
51
 
52
 
53
- def test_test_dual():
54
  """Test data/test-dual.txt."""
55
  test_dual = Path("data/test-dual.txt").read_text(encoding="utf8")
56
-
57
- l_dual, r_dual = text2lists(test_dual)
 
4
  from radiobee.text2lists import text2lists
5
 
6
 
7
+ def test_text2lists_dual1():
8
  """Test text2lists data\test-dual.txt."""
9
  filename = r"data\test-dual.txt"
10
  text = loadtext(filename) # noqa
11
  l1, l2 = text2lists(text)
12
  assert l2[0] in [""]
13
+ assert "国际\n中\n双语"[:2] in l1[0]
14
+ assert '2021' in l2[5]
15
 
16
 
17
  def test_shakespeare1000():
18
  """Separate first 1000.
19
+
20
  from pathlib import Path
21
  import zipfile
22
  dir_loc = r""
 
35
  break
36
  line += 1
37
  Path(f"data/shakespeare-zh-en-{numb_lines}.txt").write_text("\n".join(text1000), encoding="utf8")
38
+
39
  tset = cmat2test(cmat)
40
  df = pd.DataFrame(tset).rename(columns=dict(zip(range(0, 3), ['x', 'y', 'cos'])))
41
  plot_df(df)
42
+
43
  """
44
  # text1000a = Path("data/shakespeare-zh-en-1000.txt").read_text(encoding="utf8")
45
  # text2000 = Path("data/shakespeare-zh-en-1000.txt").read_text(encoding="utf8")
 
47
 
48
  # l1000a, l10002b = text2lists(text1000)
49
  # l2000a, l2000b = text2lists(text2000)
50
+
51
  l4000, r4000 = text2lists(text4000)
52
 
53
 
54
+ def test_test_dual2():
55
  """Test data/test-dual.txt."""
56
  test_dual = Path("data/test-dual.txt").read_text(encoding="utf8")
57
+
58
+ l_dual, r_dual = text2lists(test_dual)
tests/test_text2lists_bug2.py CHANGED
@@ -5,12 +5,10 @@ from radiobee.text2lists import text2lists
5
 
6
 
7
  def test_text2lists_bug2():
8
- """Test text2lists data\问题2测试文件.txt."""
9
  filename = r"data\问题2测试文件.txt"
10
- text = loadtext(filename) # noqa
11
- l1, l2 = text2lists(text)
12
- # assert l2[0] in [""]
13
- # assert "国际\n中\n双语" in l1[0]
14
 
15
- assert len(l1) == 4
16
- assert len(l2) == 5
 
5
 
6
 
7
  def test_text2lists_bug2():
8
+ r"""Test text2lists data\问题2测试文件.txt."""
9
  filename = r"data\问题2测试文件.txt"
10
+ textbug2 = loadtext(filename) # noqa
11
+ l1, l2 = text2lists(textbug2)
 
 
12
 
13
+ assert len(l1) == 5
14
+ assert len(l2) == 4