Skip to content

Commit

Permalink
reprを実装して何の文字列かわかるようにした。
Browse files Browse the repository at this point in the history
  • Loading branch information
haruo31 committed Oct 2, 2021
1 parent 7770f75 commit bf15cf5
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 2 deletions.
13 changes: 13 additions & 0 deletions pyknp/juman/mlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ def __getitem__(self, index):
def __len__(self):
return len(self._mrph)

def __repr__(self):
return 'MList(%s)' % repr(self.spec())


class MListTest(unittest.TestCase):

Expand Down Expand Up @@ -116,6 +119,16 @@ def test_doukei(self):
self.assertEqual(mlist.spec(), spec)
self.assertEqual(mlist.new_spec(), new_spec)

def test_repr(self):
import pyknp
spec = """母 はは 母 名詞 6 普通名詞 1 * 0 * 0 "代表表記:母/はは 漢字読み:訓 カテゴリ:人 ドメイン:家庭・暮らし"
@ 母 ぼ 母 名詞 6 普通名詞 1 * 0 * 0 "代表表記:母/ぼ 漢字読み:音 カテゴリ:人"
です です だ 判定詞 4 * 0 判定詞 25 デス列基本形 27 NIL
"""
mlist = MList(spec)
repr_mlist = eval(repr(mlist))
self.assertEqual(repr_mlist.spec(), mlist.spec())


if __name__ == '__main__':
unittest.main()
9 changes: 9 additions & 0 deletions pyknp/juman/morpheme.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,9 @@ def _parse_fstring(self, fstring):
rvalue[key] = val.split(";")
return rvalue

def __repr__(self):
return "Morpheme(%s)" % repr(self.spec())


class MorphemeTest(unittest.TestCase):

Expand Down Expand Up @@ -311,6 +314,12 @@ def test_knp(self):
self.assertEqual(mrph.fstring, '<漢字><かな漢字><自立><←複合><名詞相当語>')
self.assertEqual(mrph.spec(), spec)

def test_repr(self):
spec = "構文 こうぶん 構文 名詞 6 普通名詞 1 * 0 * 0 NIL <漢字><かな漢字><自立><←複合><名詞相当語>\n"
mrph = Morpheme(spec)
new_mrph = eval(repr(mrph))
self.assertEqual(mrph.spec(), new_mrph.spec())


class MorphemeTest2(unittest.TestCase):

Expand Down
18 changes: 18 additions & 0 deletions pyknp/knp/blist.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,9 @@ def get_clause_starts(self, concat_clause_in_paren=False, discourse_clause=False
starts.append(idx + 1)
return starts

def __repr__(self):
return "BList(%s)" % repr(self.spec())


class BListTest(unittest.TestCase):

Expand Down Expand Up @@ -505,6 +508,21 @@ def test4(self):
self.assertEqual(pas.cfid, "束の間/つかのま:判0")
self.assertEqual(len(pas.arguments), 0)

def test5(self):
spec = """
# S-ID:1 KNP:4.20-CF1.1 DATE:2020/08/04 SCORE:-41.95960
* 1D <文頭><感動詞><修飾><係:連用><区切:0-4><連用要素><連用節><正規化代表表記:こんにちは/こんにちは><主辞代表表記:こんにちは/こんにちは>
+ 1D <文頭><感動詞><修飾><係:連用><区切:0-4><連用要素><連用節><正規化代表表記:こんにちは/こんにちは>
こんにちは こんにちは こんにちは 感動詞 12 * 0 * 0 * 0 "代表表記:こんにちは/こんにちは" <代表表記:こんにちは/こんにちは><正規化代表表記:こんにちは/こんにちは><文頭><かな漢字><ひらがな><自立><内容語><タグ単位始><文節始><文節主辞>
* -1D <文末><体言><用言:判><体言止><レベル:C><区切:5-5><ID:(文末)><裸名詞><提題受:30><主節><状態述語><正規化代表表記::/:><主辞代表表記::/:>
+ -1D <文末><体言><用言:判><体言止><レベル:C><区切:5-5><ID:(文末)><裸名詞><提題受:30><主節><状態述語><判定詞><名詞項候補><先行詞候補><正規化代表表記::/:><用言代表表記::/:><時制-無時制><格解析結果::/::判0:ガ/U/-/-/-/->
: : : 名詞 6 普通名詞 1 * 0 * 0 "未知語:未対応文字種 品詞推定:特殊 疑似代表表記 代表表記::/: 品詞変更::-:-:-15-1-0-0" <未知語><品詞推定:特殊><疑似代表表記><代表表記::/:><正規化代表表記::/:><文末><表現文末><品詞変更::-:-:-15-1-0-0-"未知語:未対応文字種 品詞推定:特殊 疑似代表表記 代表表記::/:"><品曖-その他><記英数カ><英記号><記号><名詞相当語><自立><内容語><タグ単位始><文節始><文節主辞>
EOS
"""
blist = BList(spec)
new_blist = eval(repr(blist))
self.assertEqual(blist.spec(), new_blist.spec())


if __name__ == '__main__':
unittest.main()
8 changes: 8 additions & 0 deletions pyknp/knp/bunsetsu.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,9 @@ def pstring(self, string=None):
else:
return self._pstring

def __repr__(self):
return "Bunsetsu(%s)" % repr(self.spec())


class BunsetsuTest(unittest.TestCase):

Expand Down Expand Up @@ -177,6 +180,11 @@ def test_spec(self):
bnst.push_tag(tag2)
self.assertEqual(bnst.spec(), self.spec)

def test_repr(self):
bnst = Bunsetsu(self.bunsetsu_str)
new_bnst = eval(repr(bnst))
self.assertEqual(bnst.spec(), new_bnst.spec())


if __name__ == '__main__':
unittest.main()
12 changes: 12 additions & 0 deletions pyknp/knp/rel.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,15 @@ def __init__(self, fstring):
self.sid = sid
self.tid = id_
self.mode = mode

def __repr__(self):
if self.ignore:
return 'Rel("")'
specs = []
specs.append('type="%s"' % self.atype)
if self.mode:
specs.append('mode="%s"' % self.mode)
specs.append('target="%s"' % self.targtet)
if self.sid:
specs.append('sid="%s" id="%s"' % (self.sid, self.id))
return 'Rel(%s)' % repr(' '.join(specs))
53 changes: 51 additions & 2 deletions pyknp/knp/syngraph.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,25 @@ def __init__(self, spec):
else:
self.feature = string

def spec(self):
return "!! %s %s%s %s%s" % (
','.join(str(n) for n in self.tagids),
','.join(str(n) for n in self.parentids),
self.dpndtype,
"<見出し:%s>" % self.midasi if self.midasi else "",
self.feature
)

def __repr__(self):
return "SynNodes(%s)" % repr(self.spec())


class SynNode(object):

def __init__(self, spec):
self.synid = ''
self.tagids = []
self.score = ''
self.tagids = None
self.score = None
self.feature = ''

# ! 1 <SYNID:s1201:所在/しょざい><スコア:0.693><上位語><下位語数:323>
Expand All @@ -60,6 +72,22 @@ def __init__(self, spec):

self.feature = string

def spec(self):
specs = []
if self.synid:
specs.append("<SYNID:%s>" % self.synid)
if self.score is not None:
specs.append("<スコア:%f>" % self.score)
specs.append(self.feature)

return "! %s %s" % (
",".join(str(n) for n in self.tagids),
"".join(specs)
)

def __repr__(self):
return 'SynNode(%s)' % repr(self.spec())


class SynNodesTest(unittest.TestCase):

Expand All @@ -83,6 +111,20 @@ def test_synnodes(self):
self.assertEqual(synnodes2.midasi, '冷え込む')
self.assertEqual(synnodes2.feature, '')

def test_spec(self):
for s in [self.str1, self.str2]:
synnodes = SynNodes(s)
self.assertEqual(synnodes.spec(), s)

def test_repr(self):
synnodes = SynNodes(self.str1)
new_s = eval(repr(synnodes))
self.assertEqual(synnodes.tagids, new_s.tagids)
self.assertEqual(synnodes.parentids, new_s.parentids)
self.assertEqual(synnodes.dpndtype, new_s.dpndtype)
self.assertEqual(synnodes.midasi, new_s.midasi)
self.assertEqual(synnodes.feature, new_s.feature)


class SynNodeTest(unittest.TestCase):

Expand All @@ -108,6 +150,13 @@ def test_synnode(self):
self.assertEqual(synnode3.score, 0.693)
self.assertEqual(synnode3.feature, '<上位語><下位語数:323>')

def test_repr(self):
synnode = SynNode(self.str1)
new_s = eval(repr(synnode))
self.assertEqual(synnode.synid, new_s.synid)
self.assertEqual(synnode.score, new_s.score)
self.assertEqual(synnode.feature, new_s.feature)


if __name__ == '__main__':
unittest.main()

0 comments on commit bf15cf5

Please sign in to comment.