Skip to content

Commit

Permalink
Merge pull request #3 from MarvNC/fix-case-multiple-terms-in-def
Browse files Browse the repository at this point in the history
Fix Various JA Reading Parses
  • Loading branch information
MarvNC authored Dec 23, 2023
2 parents 97bbfac + 81a6012 commit 22b7081
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 22 deletions.
6 changes: 4 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"version": "1.2.0",
"scripts": {
"test": "ava"
},
Expand Down
1 change: 1 addition & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)**
Expand Down
25 changes: 21 additions & 4 deletions src/convertWikipedia.js
Original file line number Diff line number Diff line change
Expand Up @@ -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}...`);

Expand All @@ -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',
Expand All @@ -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);
});
Expand Down Expand Up @@ -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;
}
40 changes: 24 additions & 16 deletions src/readingParse.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,36 @@
const leewayAfterTerm = 10;
const leewayAfterTerm = 2;

/**
* @param {string} definition
* @param {string} term
* @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 '';
}
Expand Down
25 changes: 25 additions & 0 deletions src/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,31 @@ const testCases = [
expectedReading:
'こうえきざいだんほうじんふっこうかいぬまづちゅうおうびょういん',
},
{
line: `<http://ja.dbpedia.org/resource/Hagenuk_MT-2000> <http://www.w3.org/2000/01/rdf-schema#comment> "Hagenuk MT-2000は1994年に発売された携帯電話である。この端末はデンマークStøvringにあるHagenukの開発センターで設計・製造された。この端末は前身である1992年のHagenuk MT-900とともに (en) の機能を導入した最初期の携帯電話製品の一つである。また、MT-2000は従来の外付けアンテナではなく内蔵アンテナを組み込んだ世界初の製品でもある。さらに、Hagenuk MT-2000はテトリス系のゲームを組み込んだ世界初の携帯電話でもある。"@ja .`,
term: 'Hagenuk MT-2000',
expectedReading: '',
},
{
line: `<http://ja.dbpedia.org/resource/Moke(s)> <http://www.w3.org/2000/01/rdf-schema#comment> "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: `<http://ja.dbpedia.org/resource/S(o)un(d)beams> <http://www.w3.org/2000/01/rdf-schema#comment> "『s(o)un(d)beams』(サウンドビームス)は、Salyuのソロプロジェクト「salyu × salyu」の1枚目のアルバム。"@ja .`,
term: 'S(o)un(d)beams',
expectedReading: 'サウンドビームス',
},
{
line: `<http://ja.dbpedia.org/resource/OuterCurve_Foundation> <http://www.w3.org/2000/01/rdf-schema#comment> "OuterCurve Foundationとは501(c)(6)非営利法人でマイクロソフトが設立したが後に分離された。「ソフトウェア企業とオープンソースコミュニティ間相互の理解とコードのやり取りを可能にする」ことを目標としている。2009年9月10日にマイクロソフトの社員と系列企業が主導してCodePlex Foundationとして設立された。2010年9月にOuterCurve Foundationに法人名を変更し、11月に定款を変更し委員会を拡大した。手がけるソフトウェアプロジェクトの多くが.NET Frameworkに対応するものである。"@ja .`,
term: 'OuterCurve Foundation',
expectedReading: '',
},
{
line: `<http://ja.dbpedia.org/resource/スピン構造> <http://www.w3.org/2000/01/rdf-schema#comment> "微分幾何学において、向き付け可能リーマン多様体 (M, g) 上のスピン構造(スピンこうぞう、英: spin structure)は、付随するの定義を可能にし、微分幾何学におけるスピノルの概念を生じる。 数理物理学、特に場の量子論へ広く応用され、電荷を持たないフェルミオンに関する任意の理論の定義にスピン構造は必須である。純粋数学的にも、微分幾何学や代数的位相幾何学、K-理論などに於いてスピン構造は興味の対象である。スピン構造はに対する基礎付けを成す。"@ja .`,
term: 'スピン構造',
expectedReading: 'スピンこうぞう',
}
],
},
{
Expand Down

0 comments on commit 22b7081

Please sign in to comment.