From 9d5625329495015ad3531437eb14e028fc4c8499 Mon Sep 17 00:00:00 2001 From: MarvNC Date: Fri, 22 Dec 2023 23:32:00 -0800 Subject: [PATCH 01/13] Add broken test --- src/test.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test.js b/src/test.js index a04f847..d3dc4c6 100644 --- a/src/test.js +++ b/src/test.js @@ -60,6 +60,12 @@ const testCases = [ expectedReading: 'こうえきざいだんほうじんふっこうかいぬまづちゅうおうびょういん', }, + { + line: ` "Hagenuk MT-2000は1994年に発売された携帯電話である。この端末はデンマークStøvringにあるHagenukの開発センターで設計・製造された。この端末は前身である1992年のHagenuk MT-900とともに (en) の機能を導入した最初期の携帯電話製品の一つである。また、MT-2000は従来の外付けアンテナではなく内蔵アンテナを組み込んだ世界初の製品でもある。さらに、Hagenuk MT-2000はテトリス系のゲームを組み込んだ世界初の携帯電話でもある。"@ja .`, + term: 'Hagenuk_MT-2000', + expectedReading: + '', + }, ], }, { From eaed52a056f375ec03c3a56f49aa978795447d2b Mon Sep 17 00:00:00 2001 From: MarvNC Date: Fri, 22 Dec 2023 23:36:06 -0800 Subject: [PATCH 02/13] Set 1.1 vers --- package.json | 1 + src/convertWikipedia.js | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 28ee20e..0b54cea 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,5 @@ { + "version": "1.1", "scripts": { "test": "ava" }, diff --git a/src/convertWikipedia.js b/src/convertWikipedia.js index 2f6ab3e..79d7c71 100644 --- a/src/convertWikipedia.js +++ b/src/convertWikipedia.js @@ -6,8 +6,10 @@ import { Dictionary, TermEntry } from 'yomichan-dict-builder'; import { parseLine } from './parseLine.js'; import { languagesAllowed } from './constants.js'; +import { version } from '../package.json'; + const linkCharacter = '⧉'; -const outputZipName = (lang) => `${lang} Wikipedia (v1.1).zip`; +const outputZipName = (lang) => `${lang} Wikipedia (v${version}).zip`; const shortAbstractFile = (lang) => `short-abstracts_lang=${lang.toLowerCase()}.ttl`; @@ -39,7 +41,7 @@ const shortAbstractFile = (lang) => console.log(`Processed ${processedLines} lines, exporting...`); await dict.setIndex({ - title: `${lang} Wikipedia [${date}]`, + title: `${lang} Wikipedia [${date}] (v${version})`, revision: `wikipedia_${new Date().toISOString()}`, format: 3, url: 'https://github.com/MarvNC/wikipedia-yomitan', From 0e7a8a7442983e56ed67ddddbcf29ab57977ffad Mon Sep 17 00:00:00 2001 From: MarvNC Date: Fri, 22 Dec 2023 23:44:07 -0800 Subject: [PATCH 03/13] Fix indexOf bracket instance --- src/readingParse.js | 11 ++++++----- src/test.js | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/readingParse.js b/src/readingParse.js index 0319fea..9fbd9d5 100644 --- a/src/readingParse.js +++ b/src/readingParse.js @@ -9,14 +9,15 @@ function getReadingFromDefinition(definition, term) { // Remove spaces from definition and term definition = definition.replace(/ /g, ''); term = term.replace(/ /g, ''); - const bracketRegex = /[((]([^))]*)/g; + const bracketRegex = /([((]([^))]*))/g; const bracketMatches = bracketRegex.exec(definition); - // @ts-ignore - if (bracketMatches?.length >= 1) { + + if (bracketMatches && bracketMatches.length >= 2) { // @ts-ignore - const bracketContent = bracketMatches[1]; + const outerBracketContent = bracketMatches[1]; + const bracketContent = bracketMatches[2]; // Check if the bracket is at the beginning of the definition or closely following the term - const bracketIndex = definition.indexOf(bracketContent); + const bracketIndex = definition.indexOf(outerBracketContent); const termIndex = definition.indexOf(term) ?? 0; const termEndIndex = termIndex + term.length; if (bracketIndex - termEndIndex > leewayAfterTerm) { diff --git a/src/test.js b/src/test.js index d3dc4c6..a8d01f2 100644 --- a/src/test.js +++ b/src/test.js @@ -62,7 +62,7 @@ const testCases = [ }, { line: ` "Hagenuk MT-2000は1994年に発売された携帯電話である。この端末はデンマークStøvringにあるHagenukの開発センターで設計・製造された。この端末は前身である1992年のHagenuk MT-900とともに (en) の機能を導入した最初期の携帯電話製品の一つである。また、MT-2000は従来の外付けアンテナではなく内蔵アンテナを組み込んだ世界初の製品でもある。さらに、Hagenuk MT-2000はテトリス系のゲームを組み込んだ世界初の携帯電話でもある。"@ja .`, - term: 'Hagenuk_MT-2000', + term: 'Hagenuk MT-2000', expectedReading: '', }, From bd6a71efff6affa8a125e80df5354b573fa4871a Mon Sep 17 00:00:00 2001 From: MarvNC Date: Fri, 22 Dec 2023 23:46:36 -0800 Subject: [PATCH 04/13] Add new test --- src/test.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test.js b/src/test.js index a8d01f2..2bba927 100644 --- a/src/test.js +++ b/src/test.js @@ -63,8 +63,12 @@ const testCases = [ { line: ` "Hagenuk MT-2000は1994年に発売された携帯電話である。この端末はデンマークStøvringにあるHagenukの開発センターで設計・製造された。この端末は前身である1992年のHagenuk MT-900とともに (en) の機能を導入した最初期の携帯電話製品の一つである。また、MT-2000は従来の外付けアンテナではなく内蔵アンテナを組み込んだ世界初の製品でもある。さらに、Hagenuk MT-2000はテトリス系のゲームを組み込んだ世界初の携帯電話でもある。"@ja .`, term: 'Hagenuk MT-2000', - expectedReading: - '', + expectedReading: '', + }, + { + line: ` "moke(s)(モークス)は、町田直隆(ex BUNGEE JUMP FESTIVAL/WORLD JUNK)の呼びかけによりスタートした3ピースバンド。2014年より活動開始。 立ち上げメンバーだったドラム岡山健二(ex andymori)の離脱に伴い、小寺良太(ex 椿屋四重奏)を迎え、町田直隆(Vocal/Guitar)/海北大輔(Bass)/小寺良太(Drums)の現在の布陣になる。レーベルはLow-Fi Records。 "@ja .`, + term: 'Moke(s)', + expectedReading: 'モークス', }, ], }, From 3293258c1f915cba16512414166b2dc6bbafcc2e Mon Sep 17 00:00:00 2001 From: MarvNC Date: Fri, 22 Dec 2023 23:46:41 -0800 Subject: [PATCH 05/13] Reduce leeway --- src/readingParse.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/readingParse.js b/src/readingParse.js index 9fbd9d5..c66d4c6 100644 --- a/src/readingParse.js +++ b/src/readingParse.js @@ -1,4 +1,4 @@ -const leewayAfterTerm = 10; +const leewayAfterTerm = 2; /** * @param {string} definition From 4466a96ec9903a2018420f0aca67908a4efcd41b Mon Sep 17 00:00:00 2001 From: MarvNC Date: Fri, 22 Dec 2023 23:52:57 -0800 Subject: [PATCH 06/13] add tests --- src/test.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test.js b/src/test.js index 2bba927..7f8f1e5 100644 --- a/src/test.js +++ b/src/test.js @@ -70,6 +70,21 @@ const testCases = [ term: 'Moke(s)', expectedReading: 'モークス', }, + { + line: ` "『s(o)un(d)beams』(サウンドビームス)は、Salyuのソロプロジェクト「salyu × salyu」の1枚目のアルバム。"@ja .`, + term: 'S(o)un(d)beams', + expectedReading: 'サウンドビームス', + }, + { + line: ` "OuterCurve Foundationとは501(c)(6)非営利法人でマイクロソフトが設立したが後に分離された。「ソフトウェア企業とオープンソースコミュニティ間相互の理解とコードのやり取りを可能にする」ことを目標としている。2009年9月10日にマイクロソフトの社員と系列企業が主導してCodePlex Foundationとして設立された。2010年9月にOuterCurve Foundationに法人名を変更し、11月に定款を変更し委員会を拡大した。手がけるソフトウェアプロジェクトの多くが.NET Frameworkに対応するものである。"@ja .`, + term: 'OuterCurve Foundation', + expectedReading: '', + }, + { + line: ` "微分幾何学において、向き付け可能リーマン多様体 (M, g) 上のスピン構造(スピンこうぞう、英: spin structure)は、付随するの定義を可能にし、微分幾何学におけるスピノルの概念を生じる。 数理物理学、特に場の量子論へ広く応用され、電荷を持たないフェルミオンに関する任意の理論の定義にスピン構造は必須である。純粋数学的にも、微分幾何学や代数的位相幾何学、K-理論などに於いてスピン構造は興味の対象である。スピン構造はに対する基礎付けを成す。"@ja .`, + term: 'スピン構造', + expectedReading: '', + } ], }, { From 0f64cbe77b66422b972648b695aa79536e1ba25a Mon Sep 17 00:00:00 2001 From: MarvNC Date: Fri, 22 Dec 2023 23:54:07 -0800 Subject: [PATCH 07/13] Fix brackets before term matches --- src/readingParse.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/readingParse.js b/src/readingParse.js index c66d4c6..1c962c9 100644 --- a/src/readingParse.js +++ b/src/readingParse.js @@ -11,18 +11,22 @@ function getReadingFromDefinition(definition, term) { term = term.replace(/ /g, ''); const bracketRegex = /([((]([^))]*))/g; const bracketMatches = bracketRegex.exec(definition); - + if (bracketMatches && bracketMatches.length >= 2) { // @ts-ignore const outerBracketContent = bracketMatches[1]; const bracketContent = bracketMatches[2]; - // Check if the bracket is at the beginning of the definition or closely following the term const bracketIndex = definition.indexOf(outerBracketContent); const termIndex = definition.indexOf(term) ?? 0; const termEndIndex = termIndex + term.length; + // If the bracket is not at the beginning of the definition or closely following the term, ignore it if (bracketIndex - termEndIndex > leewayAfterTerm) { return ''; } + // If the bracket is within the term or before the term, ignore it + if (bracketIndex < termIndex) { + return ''; + } return parseReadingFromBrackets(bracketContent, term); } return ''; From 6d3c5c9ded85d020db9ed5d9c24c079d957cbe69 Mon Sep 17 00:00:00 2001 From: MarvNC Date: Sat, 23 Dec 2023 00:16:06 -0800 Subject: [PATCH 08/13] Refactor getReadingFromDefinition function to normalize text and use matchAll for bracket matching --- src/readingParse.js | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/readingParse.js b/src/readingParse.js index 1c962c9..7fd9a16 100644 --- a/src/readingParse.js +++ b/src/readingParse.js @@ -6,28 +6,31 @@ const leewayAfterTerm = 2; * @returns {string} */ function getReadingFromDefinition(definition, term) { + const normalizeText = (text) => text.replace(/ /g, '').toLowerCase(); // Remove spaces from definition and term - definition = definition.replace(/ /g, ''); - term = term.replace(/ /g, ''); - const bracketRegex = /([((]([^))]*))/g; - const bracketMatches = bracketRegex.exec(definition); + definition = normalizeText(definition); + term = normalizeText(term); + const bracketRegex = /([((]([^))]*)[))])/g; + const bracketMatches = definition.matchAll(bracketRegex) ?? []; - if (bracketMatches && bracketMatches.length >= 2) { - // @ts-ignore - const outerBracketContent = bracketMatches[1]; - const bracketContent = bracketMatches[2]; - const bracketIndex = definition.indexOf(outerBracketContent); - const termIndex = definition.indexOf(term) ?? 0; - const termEndIndex = termIndex + term.length; - // If the bracket is not at the beginning of the definition or closely following the term, ignore it - if (bracketIndex - termEndIndex > leewayAfterTerm) { - return ''; + for (const matchArr of bracketMatches) { + if (matchArr && matchArr.length >= 3) { + // @ts-ignore + const outerBracketContent = matchArr[1]; + const bracketContent = matchArr[2]; + const bracketIndex = definition.indexOf(outerBracketContent); + const termIndex = definition.indexOf(term) ?? 0; + const termEndIndex = termIndex + term.length; + // If the bracket is not at the beginning of the definition or closely following the term, ignore it + if (bracketIndex - termEndIndex > leewayAfterTerm) { + continue; + } + // If the bracket is within the term or before the term, ignore it + if (bracketIndex < termEndIndex) { + continue; + } + return parseReadingFromBrackets(bracketContent, term); } - // If the bracket is within the term or before the term, ignore it - if (bracketIndex < termIndex) { - return ''; - } - return parseReadingFromBrackets(bracketContent, term); } return ''; } From de58edee480f4a86880bbf343a30ac16f18bc95c Mon Sep 17 00:00:00 2001 From: MarvNC Date: Sat, 23 Dec 2023 00:26:30 -0800 Subject: [PATCH 09/13] Fix last test --- src/test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test.js b/src/test.js index 7f8f1e5..00598c5 100644 --- a/src/test.js +++ b/src/test.js @@ -83,7 +83,7 @@ const testCases = [ { line: ` "微分幾何学において、向き付け可能リーマン多様体 (M, g) 上のスピン構造(スピンこうぞう、英: spin structure)は、付随するの定義を可能にし、微分幾何学におけるスピノルの概念を生じる。 数理物理学、特に場の量子論へ広く応用され、電荷を持たないフェルミオンに関する任意の理論の定義にスピン構造は必須である。純粋数学的にも、微分幾何学や代数的位相幾何学、K-理論などに於いてスピン構造は興味の対象である。スピン構造はに対する基礎付けを成す。"@ja .`, term: 'スピン構造', - expectedReading: '', + expectedReading: 'スピンこうぞう', } ], }, From 4d17912d3543576dbea389e3dbe28778c3108c23 Mon Sep 17 00:00:00 2001 From: MarvNC Date: Sat, 23 Dec 2023 00:28:21 -0800 Subject: [PATCH 10/13] 1.2.0 --- package-lock.json | 6 ++++-- package.json | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index fce9279..dd1acf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ }, "devDependencies": { "ava": "^6.0.1" - } + }, + "version": "1.2.0" }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", @@ -2265,5 +2266,6 @@ "jszip": "^3.10.1" } } - } + }, + "version": "1.2.0" } diff --git a/package.json b/package.json index 0b54cea..ce32583 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "1.1", + "version": "1.2.0", "scripts": { "test": "ava" }, From 3b251ede8a92778b52f0d7bc068469a0df9ed26c Mon Sep 17 00:00:00 2001 From: MarvNC Date: Sat, 23 Dec 2023 00:35:13 -0800 Subject: [PATCH 11/13] Update version --- src/convertWikipedia.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/convertWikipedia.js b/src/convertWikipedia.js index 79d7c71..d1922eb 100644 --- a/src/convertWikipedia.js +++ b/src/convertWikipedia.js @@ -6,14 +6,16 @@ import { Dictionary, TermEntry } from 'yomichan-dict-builder'; import { parseLine } from './parseLine.js'; import { languagesAllowed } from './constants.js'; -import { version } from '../package.json'; - const linkCharacter = '⧉'; -const outputZipName = (lang) => `${lang} Wikipedia (v${version}).zip`; +const outputZipName = (lang, version) => `${lang} Wikipedia (v${version}).zip`; const shortAbstractFile = (lang) => `short-abstracts_lang=${lang.toLowerCase()}.ttl`; (async () => { + const version = await getVersion(); + + console.log(`Using version ${version}`); + const { lang, date } = readArgs(); console.log(`Converting ${lang} Wikipedia dump from ${date}...`); @@ -179,3 +181,9 @@ function readArgs() { } return { lang, date: dateInput }; } + +function getVersion() { + const packageJsonPath = path.join(process.cwd(), 'package.json'); + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); + return packageJson.version; +} From a829055f686b38871d9e4d4fbaa73ef616b89808 Mon Sep 17 00:00:00 2001 From: MarvNC Date: Sat, 23 Dec 2023 00:37:53 -0800 Subject: [PATCH 12/13] Update outputZipName function to include date in the zip name --- src/convertWikipedia.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/convertWikipedia.js b/src/convertWikipedia.js index d1922eb..c12d164 100644 --- a/src/convertWikipedia.js +++ b/src/convertWikipedia.js @@ -7,7 +7,14 @@ import { parseLine } from './parseLine.js'; import { languagesAllowed } from './constants.js'; const linkCharacter = '⧉'; -const outputZipName = (lang, version) => `${lang} Wikipedia (v${version}).zip`; +/** + * + * @param {string} lang + * @param {string} date + * @param {string} version + * @returns + */ +const outputZipName = (lang, date, version) => `${lang} Wikipedia [${date}] (v${version}).zip`; const shortAbstractFile = (lang) => `short-abstracts_lang=${lang.toLowerCase()}.ttl`; @@ -40,7 +47,7 @@ const shortAbstractFile = (lang) => } } - console.log(`Processed ${processedLines} lines, exporting...`); + console.log(`Processed ${processedLines} lines, exporting zip...`); await dict.setIndex({ title: `${lang} Wikipedia [${date}] (v${version})`, @@ -58,7 +65,7 @@ div.gloss-sc-div[data-sc-wikipedia=term-specifier] { }); await dict.export('./'); - console.log(`Exported to ${outputZipName(lang)}`); + console.log(`Exported to ${outputZipName(lang, date, version)}`); })().catch((e) => { console.error(e); }); From 81a6012713131644e670bf7cb22f75b5a3c642df Mon Sep 17 00:00:00 2001 From: MarvNC Date: Sat, 23 Dec 2023 00:42:45 -0800 Subject: [PATCH 13/13] Add changelog --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index dfb88b2..a4c8150 100644 --- a/readme.md +++ b/readme.md @@ -15,6 +15,7 @@ more Yomitan dictionaries and tools, see ## Download +**2023-12-23 Version 1.2**: Improved parsing of more readings for Japanese. **2023-12-21 Version 1.1**: Updated script for better parsing of readings. - **[Download JA Wikipedia for Yomitan](https://drive.google.com/open?id=14WEMNY3OhUclvQeKu1DylpMo5USmsnX3&usp=drive_fs)**