UNPKG

yoastseo-dep

Version:

Yoast clientside page analysis

364 lines (334 loc) 11.3 kB
import getWordForms from "../../../../../src/languageProcessing/languages/ja/customResearches/getWordForms"; import { Paper } from "../../../../../index"; import Researcher from "../../../../../src/languageProcessing/languages/ja/Researcher"; import getMorphologyData from "../../../../specHelpers/getMorphologyData"; const morphologyData = getMorphologyData( "ja" ); describe( "The getWordForms function", () => { it( "creates word forms for a Japanese keyphrase that contains spaces", () => { const paper = new Paper( "休ま", { keyword: "かしら かい を ばっかり", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "かしらかう", "かしらかい", "かしらかわ", "かしらかえ", "かしらかお", "かしらかっ", "かしらかえる", "かしらかわせ", "かしらかわせる", "かしらかわれ", "かしらかわれる", "かしらかおう", "かしらかく", "かしらかき", "かしらかか", "かしらかけ", "かしらかこ", "かしらかける", "かしらかかせ", "かしらかかせる", "かしらかかれ", "かしらかかれる", "かしらかこう", "かしらかかっ", "かしらかぐ", "かしらかぎ", "かしらかが", "かしらかげ", "かしらかご", "かしらかげる", "かしらかがせ", "かしらかがせる", "かしらかがれ", "かしらかがれる", "かしらかごう" ] ], synonymsForms: [], } ); } ); it( "creates word forms for a Japanese keyphrase.", () => { const paper = new Paper( "休ま", { keyword: "休め", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "休む", "休み", "休ま", "休め", "休も", "休ん", "休める", "休ませ", "休ませる", "休まれ", "休まれる", "休もう" ] ], synonymsForms: [], } ); } ); it( "returns empty structure if no keyword or synonyms are supplied.", () => { const paper = new Paper( "休ま", { keyword: "", synonyms: "", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [] ], synonymsForms: [], } ); } ); it( "returns an empty keyphrase field if only synonyms are supplied.", () => { const paper = new Paper( "休ま", { keyword: "", synonyms: "休め", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [] ], synonymsForms: [ [ [ "休む", "休み", "休ま", "休め", "休も", "休ん", "休める", "休ませ", "休ませる", "休まれ", "休まれる", "休もう" ] ] ], } ); } ); it( "returns the exact match of a Japanese keyphrase using double quotation marks.", () => { const paper = new Paper( "休ま", { keyword: "\"休め\"", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "\"休め\"" ] ], synonymsForms: [], } ); } ); it( "returns the exact match of a Japanese keyphrase using Japanese-specific quotation marks.", () => { const paper = new Paper( "頑張ら", { keyword: "「頑張り」", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "「頑張り」" ] ], synonymsForms: [], } ); } ); it( "creates word forms for Japanese keyphrase and synonyms.", () => { const paper = new Paper( "話せる及ん", { keyword: "話さ", synonyms: "休め, 及ぼ", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "話す", "話し", "話さ", "話せ", "話そ", "話せる", "話させ", "話させる", "話され", "話される", "話そう" ] ], synonymsForms: [ [ [ "休む", "休み", "休ま", "休め", "休も", "休ん", "休める", "休ませ", "休ませる", "休まれ", "休まれる", "休もう" ] ], [ [ "及ぶ", "及び", "及ば", "及べ", "及ぼ", "及ん", "及べる", "及ばせ", "及ばせる", "及ばれ", "及ばれる", "及ぼう" ] ], ], } ); } ); it( "creates word forms for Japanese keyphrase and synonyms, where one of the synonyms requires exact match.", () => { const paper = new Paper( "話せる及ん", { keyword: "話さ", synonyms: "『休め』, 及ぼ", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "話す", "話し", "話さ", "話せ", "話そ", "話せる", "話させ", "話させる", "話され", "話される", "話そう" ] ], synonymsForms: [ [ [ "『休め』" ] ], [ [ "及ぶ", "及び", "及ば", "及べ", "及ぼ", "及ん", "及べる", "及ばせ", "及ばせる", "及ばれ", "及ばれる", "及ぼう" ] ], ], } ); } ); it( "creates forms for a Japanese keyphrase consisting of multiple words.", () => { const paper = new Paper( "犬です。", { /* * 猫 - one character noun, no forms required * が - function word, is deleted * 遊んでいる - verb, forms are created */ keyword: "猫が遊んでいる", synonyms: "", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "猫" ], [ "遊ぬ", "遊に", "遊な", "遊ね", "遊の", "遊ん", "遊ねる", "遊なせ", "遊なせる", "遊なれ", "遊なれる", "遊のう", "遊む", "遊み", "遊ま", "遊め", "遊も", "遊める", "遊ませ", "遊ませる", "遊まれ", "遊まれる", "遊もう", "遊ぶ", "遊び", "遊ば", "遊べ", "遊ぼ", "遊べる", "遊ばせ", "遊ばせる", "遊ばれ", "遊ばれる", "遊ぼう" ] ], synonymsForms: [], } ); } ); it( "creates forms for a Japanese keyphrase consisting of multiple words separated by spaces.", () => { const paper = new Paper( "文章です。", { /* * レシピ - noun, no forms required * 美味しい - adjective, forms are created */ keyword: "レシピ 美味しい", synonyms: "", } ); const researcher = new Researcher( paper ); researcher.addResearchData( "morphology", morphologyData ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "レシピ" ], [ "美味しう", "美味しい", "美味しわ", "美味しえ", "美味しお", "美味しっ", "美味しえる", "美味しわせ", "美味しわせる", "美味しわれ", "美味しわれる", "美味しおう", "美味しく", "美味しき", "美味しか", "美味しけ", "美味しこ", "美味しける", "美味しかせ", "美味しかせる", "美味しかれ", "美味しかれる", "美味しこう", "美味しかっ", "美味しぐ", "美味しぎ", "美味しが", "美味しげ", "美味しご", "美味しげる", "美味しがせ", "美味しがせる", "美味しがれ", "美味しがれる", "美味しごう" ] ], synonymsForms: [], } ); } ); it( "returns the keyphrase and synonyms unaltered when we have a stemmer," + "and function word support, but no morphology data is available (e.g., in Free)", () => { const paper = new Paper( "話せる及ん", { keyword: "話さ", synonyms: "及ぼ", } ); const researcher = new Researcher( paper ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "話さ" ] ], synonymsForms: [ [ [ "及ぼ" ] ] ], } ); } ); it( "a test to make sure that createWordForms is not accessed when there is no morpohlogyData file " + "available (using a word that ends in る)", () => { const paper = new Paper( "話せる及ん", { keyword: "話さる", synonyms: "及ぼ", } ); const researcher = new Researcher( paper ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "話さる" ] ], synonymsForms: [ [ [ "及ぼ" ] ] ], } ); } ); it( "creates forms for a Japanese keyphrase consisting of multiple words, including function words, " + "when no morphologyData file is available.", () => { const paper = new Paper( "犬です。", { /* * 猫 - one character noun, no forms required * が - function word, is deleted * 及ぼ - verb, forms would be created in Premium, but not Free */ keyword: "猫が及ぼ", synonyms: "", } ); const researcher = new Researcher( paper ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "猫" ], [ "及ぼ" ] ], synonymsForms: [], } ); } ); it( "should not create forms for a keyword containing a single function word", () => { const paper = new Paper( "犬です。", { /* * ばっかり - function word, is deleted */ keyword: "ばっかり", synonyms: "", } ); const researcher = new Researcher( paper ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [] ], synonymsForms: [], } ); } ); it( "should not create forms for a keyword containing only function words", () => { const paper = new Paper( "犬です。", { /* * から - function word, is deleted * より - function word, is deleted */ keyword: "からより", synonyms: "", } ); const researcher = new Researcher( paper ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [] ], synonymsForms: [], } ); } ); it( "should not create forms for a synonym containing only function words", () => { const paper = new Paper( "犬です。", { /* * ばっかり - function word, is deleted */ keyword: "猫", synonyms: "からより", } ); const researcher = new Researcher( paper ); const forms = getWordForms( paper, researcher ); expect( forms ).toEqual( { keyphraseForms: [ [ "猫" ] ], synonymsForms: [ [ [] ] ], } ); } ); } );