@@ -4,17 +4,25 @@ import {RuleHelper} from "textlint-rule-helper";
44import { getTokenizer } from "kuromojin" ;
55import splitSentences , { Syntax as SentenceSyntax } from "sentence-splitter" ;
66import StringSource from "textlint-util-to-string" ;
7+ // 助詞どうか
8+ const is助詞Token = token => {
9+ return token . pos === "助詞" ;
10+ } ;
11+ const is読点Token = token => {
12+ return token . surface_form === "、" && token . pos === "名詞" ;
13+ } ;
714/**
8- * create a object that
9- * map = {
10- * // these token.surface_form === "Hoge"
11- * "Hoge" [token, token]
15+ * Create token map object
16+ * {
17+ * "で": [ token, token],
18+ * "の": [token, token]
1219 * }
1320 * @param tokens
1421 * @returns {* }
1522 */
1623function createSurfaceKeyMap ( tokens ) {
17- return tokens . reduce ( ( keyMap , token ) => {
24+ // 助詞のみを対象とする
25+ return tokens . filter ( is助詞Token ) . reduce ( ( keyMap , token ) => {
1826 // "は" : [token]
1927 if ( ! keyMap [ token . surface_form ] ) {
2028 keyMap [ token . surface_form ] = [ ] ;
@@ -43,7 +51,6 @@ const defaultOptions = {
4351 strict : false
4452} ;
4553
46-
4754/*
4855 1. Paragraph Node -> text
4956 2. text -> sentences
@@ -74,11 +81,16 @@ export default function (context, options = {}) {
7481 return getTokenizer ( ) . then ( tokenizer => {
7582 const checkSentence = ( sentence ) => {
7683 let tokens = tokenizer . tokenizeForSentence ( sentence . raw ) ;
77- const isJoshiToken = token => {
78- return token . pos === "助詞" ;
79- } ;
80- let joshiTokens = tokens . filter ( isJoshiToken ) ;
81- let joshiTokenSurfaceKeyMap = createSurfaceKeyMap ( joshiTokens ) ;
84+ let countableTokens = tokens . filter ( token => {
85+ if ( isStrict ) {
86+ return is助詞Token ( token ) ;
87+ }
88+ // デフォルトでは、"、"を間隔値の距離としてカウントする
89+ // "、" があると助詞同士の距離が開くようにすることで、並列的な"、"の使い方を許容する目的
90+ // https://github.com/azu/textlint-rule-no-doubled-joshi/issues/2
91+ return is助詞Token ( token ) || is読点Token ( token ) ;
92+ } ) ;
93+ let joshiTokenSurfaceKeyMap = createSurfaceKeyMap ( countableTokens ) ;
8294 /*
8395 # Data Structure
8496
@@ -102,8 +114,8 @@ export default function (context, options = {}) {
102114 // if found differenceIndex less than
103115 // tokes are sorted ascending order
104116 tokens . reduce ( ( prev , current ) => {
105- let startPosition = joshiTokens . indexOf ( prev ) ;
106- let otherPosition = joshiTokens . indexOf ( current ) ;
117+ let startPosition = countableTokens . indexOf ( prev ) ;
118+ let otherPosition = countableTokens . indexOf ( current ) ;
107119 // if difference
108120 let differenceIndex = otherPosition - startPosition ;
109121 if ( differenceIndex <= minInterval ) {
0 commit comments