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 28ee20e..ce32583 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,5 @@ { + "version": "1.2.0", "scripts": { "test": "ava" }, 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)** diff --git a/src/convertWikipedia.js b/src/convertWikipedia.js index 2f6ab3e..c12d164 100644 --- a/src/convertWikipedia.js +++ b/src/convertWikipedia.js @@ -7,11 +7,22 @@ import { parseLine } from './parseLine.js'; import { languagesAllowed } from './constants.js'; const linkCharacter = '⧉'; -const outputZipName = (lang) => `${lang} Wikipedia (v1.1).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`; (async () => { + const version = await getVersion(); + + console.log(`Using version ${version}`); + const { lang, date } = readArgs(); console.log(`Converting ${lang} Wikipedia dump from ${date}...`); @@ -36,10 +47,10 @@ const shortAbstractFile = (lang) => } } - console.log(`Processed ${processedLines} lines, exporting...`); + console.log(`Processed ${processedLines} lines, exporting zip...`); 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', @@ -54,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); }); @@ -177,3 +188,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; +} diff --git a/src/readingParse.js b/src/readingParse.js index 0319fea..7fd9a16 100644 --- a/src/readingParse.js +++ b/src/readingParse.js @@ -1,4 +1,4 @@ -const leewayAfterTerm = 10; +const leewayAfterTerm = 2; /** * @param {string} definition @@ -6,23 +6,31 @@ const leewayAfterTerm = 10; * @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); - // @ts-ignore - if (bracketMatches?.length >= 1) { - // @ts-ignore - const bracketContent = bracketMatches[1]; - // Check if the bracket is at the beginning of the definition or closely following the term - const bracketIndex = definition.indexOf(bracketContent); - const termIndex = definition.indexOf(term) ?? 0; - const termEndIndex = termIndex + term.length; - if (bracketIndex - termEndIndex > leewayAfterTerm) { - return ''; + definition = normalizeText(definition); + term = normalizeText(term); + const bracketRegex = /([((]([^))]*)[))])/g; + const bracketMatches = definition.matchAll(bracketRegex) ?? []; + + 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); } - return parseReadingFromBrackets(bracketContent, term); } return ''; } diff --git a/src/test.js b/src/test.js index a04f847..00598c5 100644 --- a/src/test.js +++ b/src/test.js @@ -60,6 +60,31 @@ 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: '', + }, + { + 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: 'モークス', + }, + { + 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: 'スピンこうぞう', + } ], }, {