CommonCrawl microdatardflib
を解析するために使用しています。大きな N-Quads 形式のファイルです。エンコーディングエラーで失敗するため、CSVファイルへの保存または端末への出力の最後の段階を除いて、すべて問題ありません。
私の現在のコードは次のとおりです。
import csv
import rdflib
from rdflib import ConjunctiveGraph, URIRef, Namespace, RDF, BNode
g = rdflib.ConjunctiveGraph()
g.parse("nquads.nquads", format="nquads")
with open('list.csv', 'wb') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=',',
quotechar='"', quoting=csv.QUOTE_MINIMAL)
csvwriter.writerow(['URL'])
for ctx in q.quads:
s = ctx[3]
s = s[s.index("<") + 1:s.rindex(">")] # Gets URL between < and >
csvwriter.writerow([ s ])
これは何千もの行を通過しますが、特定のポイントで中断します。
エラーは次のとおりです。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 62-63: ordinal not in range(128)
今、私はいくつかのことを試しました:
s = ctx[3].toPython()
s = ctx[3].value()
s = str(ctx[3])
s = ctx[3].encode('utf-8')
s = ctx[3].encode('utf-8', 'ignore')
などなど
データのctx[3]
形式は次のとおりです。
<http://www.serenabakessimplyfromscratch.com/2014/07/blueberry-cinnamon-swirl-crumb.html> a rdfg:Graph;rdflib:storage [a rdflib:Store;rdfs:label 'IOMemory'].
<http://www.seriouseats.com/recipes/2009/01/meat-lite-warm-winter-salad.html?ref=excerpt_readmore> a rdfg:Graph;rdflib:storage [a rdflib:Store;rdfs:label 'IOMemory'].
<http://www.grouprecipes.com/103118/broccoli-rice-casserole.html> a rdfg:Graph;rdflib:storage [a rdflib:Store;rdfs:label 'IOMemory'].
<http://www.grouprecipes.com/67612/asian-chicken-noodle-soup.html> a rdfg:Graph;rdflib:storage [a rdflib:Store;rdfs:label 'IOMemory'].
<http://www.grouprecipes.com/113715/bouillabaisse-style-fish-stew.html> a rdfg:Graph;rdflib:storage [a rdflib:Store;rdfs:label 'IOMemory'].
<http://www.drinksmixer.com/drink15xy188.html> a rdfg:Graph;rdflib:storage [a rdflib:Store;rdfs:label 'IOMemory'].
上記のコードは多くの場合に機能し、URL を正しく抽出して CSV に書き込みますが、一部のデータでは必然的に機能しなくなります。
RDFlib からテキスト コンテンツを正しく取得するにはどうすればよいですか? どのエンコーディング形式であるかを調べるにはどうすればよいですか? テキストコンテンツを取得する別の方法はありますか?