前提・実現したいこと
python初心者です。
初期に記載されていたサンプルコードを実装したところ以下のようなエラーがでてしまいました。
対処法がわからないです。どなたか教えてい頂きたいです。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "ch04_00.py", line 35, in <module> for (_, p, o) in read_ttl(in_file): File "ch04_00.py", line 17, in read_ttl for triple in parse_lines(lines): File "ch04_00.py", line 23, in parse_lines g.parse(deta='\n'.join(lines), format='n3') File "C:\Users\tnaka\anaconda3\lib\site-packages\rdflib\graph.py", line 1062, in parse source = create_input_source( File "C:\Users\tnaka\anaconda3\lib\site-packages\rdflib\parser.py", line 156, in create_input_source raise ValueError( ValueError: exactly one of source, location, file or data must be given
該当のソースコード
import bz2 import sys import MeCab from rdflib import Graph tagger = MeCab.Tagger('') tagger.parse('') #mecab-python3のこのになっhttps://github.com/SamuraiT/mecab-python3/issues/3 def read_ttl(f): "" "タートル形式のファイルからダウンロードをした" "" while True: #高速化目的100KBされます lines = [ line.decode("utf-8").rstrip() for line in f.readlines(102400)] if not lines: break for triple in parse_lines(lines): yield triple def parse_lines(lines): "" "タートルフォーマットのデータ解析してた" "" g = Graph() g.parse(deta='\n'.join(lines), format='n3') return g def tokenize(text): "" "MeCabをてて、分割してして" "" node = tagger.parseToNode(text) while node: if node.stat not in (2, 3): yield node.surface node = node.next with bz2.BZ2File(sys.argv[1]) as in_file: for (_, p, o) in read_ttl(in_file): if p.toPython() == 'http://persistence.uni-leipzig.org/nlp2rdf/ontologies/nif-core#isString': for line in o.toPython().split('\n'): words = list(tokenize(line)) if len(words) > 20: print (''.join(words))
試したこと
補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー