古文などの古い文章や工事中の文章を除いて,使えそうなものを抽出する
データ
スクレイピング用のコード↓ (URLベースで選別できる場合はスクレイピングやり直したほうが速いかも?)
import jsonlines
import fasttext
def load_blocklist(file_path):
with open(file_path, 'r') as f:
return set(line.strip() for line in f)
def is_valid_url(url, blocklist):
return not any(block in url for block in blocklist)
def is_japanese(text, model):
text = text.replace('\\n', ' ') # 改行文字をスペースに置き換える
lang, _ = model.predict(text)
return lang[0] == '__label__ja'
def is_valid_article(item, blocklist, model):
if not is_valid_url(item['url'], blocklist):
return False
if not is_japanese(item['text'], model):
return False
return True
def main():
blocklist_file = 'RefinedWeb_DomainBlocklist.txt'
fasttext_model = 'lid.176.bin'
input_file = 'wikibooks_ja.jsonl'
output_file = 'wikibooks_ja_filtered.jsonl'
blocklist = load_blocklist(blocklist_file)
model = fasttext.load_model(fasttext_model)
total_articles = 0
filtered_articles = 0
with jsonlines.open(input_file) as reader, jsonlines.open(output_file, 'w') as writer:
for item in reader:
total_articles += 1
if is_valid_article(item, blocklist, model):
writer.write(item)
filtered_articles += 1
print(f'元のデータ数: {total_articles}')
print(f'抽出された記事数: {filtered_articles}')
print(f'除外された記事数: {total_articles - filtered_articles}')
if __name__ == '__main__':
main()
元のデータ数: 17648
抽出された記事数: 17362
除外された記事数: 286
#FastTextによる日本語判定、RefinedWeb_DomainBlocklist.txtブロックリストを適用。
※ja_valid_domains.txtを有効にすると、抽出される記事数は5件まで減る(減ってしまう)
→(ja_valid_domains.txt)
biz
cc
com
info
jp
me
net
org
site
tokyo
tv
work
xyz
4/22(日)時点
todo
wikibooks
学術的なデータの収集のため、