علی شکیبا

دفتر یادداشت دیجیتال برای هر چیز مفید!

۳ مطلب در فروردين ۱۳۹۴ ثبت شده است

بسیاری از اوقات پیش می‌آید که خروجی یک بلوک کد بسیار طولانی است. به صورت طبیعی، هنگامی که پردازش به صورت دسته‌ای و در کنسول صورت می‌گیرد، چنین خروجی‌هایی معمولا در یک فایل ذخیره می‌شوند، اما در مورد IPython Notebook وضعیت کمی متفاوت است! در این وضع تمایل داریم خروجی را در ذیل بلوک کد ببینیم!

اما مشکل جایی آغاز می‌شود که خروجی بسیار طولانی است و این گونه فایل‌ها در مرورگر وب بارگذاری می‌شوند. برای من بسیار پیش آمده است که بارگذاری یک فایل منجر به هنگ و در نهایت کرش کردن مرورگر شود. به همین دلیل پاک کردن خروجی‌ها قبل از بازکردن فایل، راهکار مناسبی به نظر می‌رسد. بدین منظور کافی است در همان مسیر یک Notebook جدید را باز کرده و قطعه کد ذیل را در آن اجرا کنیم! فایلی هم نام با فایل مورد نظر که عبارت _removed به انتهای آن اضافه شده است، در همان مسیر تولید شده که شامل محتویات فایل مزبور منهای خروجی ها است. این راهکار از اینجا برداشته شده است.

import sys
import io
import os
from IPython.nbformat.current import read, write
def remove_outputs(nb):
"""remove the outputs from a notebook"""
for ws in nb.worksheets:
for cell in ws.cells:
if cell.cell_type == 'code':
cell.outputs = []

fname = "اسم فایل مورد نظر.ipynb"
with io.open(fname, 'r') as f:
nb = read(f, 'json')
remove_outputs(nb)
base, ext = os.path.splitext(fname)
new_ipynb = "%s_removed%s" % (base, ext)
with io.open(new_ipynb, 'w', encoding='utf8') as f:
write(nb, f, 'json')
print "wrote %s" % new_ipynb
۰ نظر موافقین ۰ مخالفین ۰ ۲۴ فروردين ۹۴ ، ۲۲:۳۲
علی شکیبا

یکی از امکانات جالبی که در Windows داشتم، این بود که با انتخاب چند فایل ویدیویی، جمع زمان آن فایل‌ها را نمایش می‌داد، اما در لینوکس این‌گونه نبود! به همین خاطر دست به کار شدم و یک اسکریپت به صورت زیر نوشتم

find . -iname "*.mp4" -exec mplayer -vo null -ao null -frames 0 -identify -msglevel all=0 {} \; | grep ^ID_LENGTH | python -c "import sys; print sum(float(l.split('=')[1])/60.0 for l in sys.stdin), ' minutes.'"

البته اگر پایتون نداشته باشیم، این دستورات bash مجموع زمان فیلم‌ها را به واحد ثانیه نشان می‌دهد

find . -iname "*.mp4" -exec mplayer -vo null -ao null -frames 0 -identify -msglevel all=0 {} \; | grep ^ID_LENGTH | tr -d "ID_LENGTH=" | paste -s -d+ | bc
۰ نظر موافقین ۰ مخالفین ۰ ۱۲ فروردين ۹۴ ، ۲۳:۵۵
علی شکیبا

برای گذراندن درس Text Retrieval and Search Engines و انجام تمرین‌های عملی آن نیاز به نصب Meta-toolkit است که یک کتابخانه ++C برای پیاده‌سازی سیستم‌های بازیابی متن است. برای نصب آن در Ubuntu 14.04 LTS x64 از روش زیر استفاده کردم. لازم به ذکر است که این بسته در ویندوز به صورت رسمی پشتیبانی نمی‌شود (لیستی از سکوهای مورد پشتیبانی و نحوه نصب).

برای نصب، لازم است تا ابتدا یک نسخه از کد منبع را بر روی سیستم خود دانلود کنیم

git clone https://github.com/meta-toolkit/meta.git

برای کامپایل این بسته نیاز به cmake داریم. لازم است تا به apt-get مخزن مربوطه را معرفی کنیم

sudo add-apt-repository ppa:george-edison55/cmake-3.x

حال پیش‌نیازها را نصب می‌کنیم:

sudo apt-get update
sudo apt-get install software-properties-common cmake libicu-dev

سپس به محل دانلود بسته meta رفته و پیش‌نیازهای آن را دریافت می‌کنیم (این مرحله خیلی مهم است!)

git submodule update --init --recursive

حال نوبت به نصب بسته می‌رسد

mkdir build
cd build
cp ../config.toml .
cmake ../ -DCMAKE_BUILD_TYPE=Release
make

در صورتی که فرایند نصب موفق باشد، خروجی دستور ذیل

ctest --output-on-failure

باید به صورت زیر باشد

Test project /home/ali/Downloads/meta/build
Start 1: analyzers
1/14 Test #1: analyzers ........................ Passed 0.30 sec
Start 2: stemmers
2/14 Test #2: stemmers ......................... Passed 0.33 sec
Start 3: parallel
3/14 Test #3: parallel ......................... Passed 2.90 sec
Start 4: inverted-index
4/14 Test #4: inverted-index ................... Passed 3.04 sec
Start 5: forward-index
5/14 Test #5: forward-index .................... Passed 2.34 sec
Start 6: string-list
6/14 Test #6: string-list ...................... Passed 0.00 sec
Start 7: vocabulary-map
7/14 Test #7: vocabulary-map ................... Passed 0.00 sec
Start 8: libsvm-parser
8/14 Test #8: libsvm-parser .................... Passed 0.00 sec
Start 9: classifiers
9/14 Test #9: classifiers ...................... Passed 8.89 sec
Start 10: rankers
10/14 Test #10: rankers .......................... Passed 18.67 sec
Start 11: ir-eval
11/14 Test #11: ir-eval .......................... Passed 1.01 sec
Start 12: compression
12/14 Test #12: compression ...................... Passed 0.02 sec
Start 13: graph
13/14 Test #13: graph ............................ Passed 0.01 sec
Start 14: parser
14/14 Test #14: parser ........................... Passed 0.01 sec

100% tests passed, 0 tests failed out of 14
Total Test time (real) = 37.59 sec

پی‌نوشت: در هنگام نصب، من حواسم به اجرای دستور

git submodule update --init --recursive

نبود، بنابراین کلی خطای متفرقه دریافت کردم و تقریبا 2 ساعت درگیر رفع خطا بودم تا اینکه دستکاری فایل‌ها به حدی رسید که ترجیح دادم یک نسخه جدید را build کنم! اینجا بود که فهمیدم خطا از کجا بوده! بنابراین این پست را به عنوان یک یادداشت در بلاگ درج کردم.

۰ نظر موافقین ۰ مخالفین ۰ ۰۸ فروردين ۹۴ ، ۰۲:۱۵
علی شکیبا