screen – nice idea

Chương trình screen đúng là một trình quản lý terminal rất thông minh và tiện lợi trên unix. Very nice idea.

+ Cho phép mình mở nhiều terminal ảo trên cùng một cửa sổ terminal vật lý
+ Chuyển đổi giữa các terminal dễ dàng
+ Trong trường hợp kết nối tới server (bằng ssh client), khi đường truyền bị ngắt, mình không phải chạy lại từ đầu, có thể khôi phục dễ dàng bằng các tùy chọn lệnh của screen (quá tuyệt)

Nói chung ai nghĩ ra ý tưởng này quả là giỏi.

Thiết lập Prompt cho tcsh shell

Vấn đề: Mình muốn thiết lập prompt tcsh shell theo định dạng mong muốn như sau:

[username@pc-name current_dir]
%

Sau khi search từ khóa set prompt tcsh mình đã tìm được cách làm. Rất đơn giản, chỉ cần chỉnh file .cshrc (file cấu hình shell). Thêm vào dòng sau đây

set prompt=”[$user@$HOST %c]\n% “

Giải thích chi tiết xem trong: http://asellus.cee.odu.edu/uclhd/uclhd_unix_prompt.php

Install minipar parser (Step by Step)

Minipar là một tool dependency parsing cho tiếng Anh, viết bởi Dekang Lin (http://www.cs.ualberta.ca/~lindek/minipar.htm). Chạy tương đối nhanh, ví dụ trên máy Pentium II 300 với 128MB memory, nó phân tích khoảng 300 từ trên giây, khá nhanh so với một bộ phân tích Denpendency Parsing khác là Stanford Parser (http://nlp.stanford.edu/software/lex-parser.shtml)

Bài viết nhắm hướng dẫn cách sử dụng tool minipar cho dependency parsing, step by step. Môi trường sử dụng là Unix hoặc Unix-like ví dụ như Cygwin

Step 0: Download minipar từ trang chủ http://www.cs.ualberta.ca/~lindek/minipar/. Có nhiều version khác nhau, ở đây tôi sử dụng version cho linux 32bit. Giả sử tôi chép vào thư mục ~/nlp/local-tools

Step 1: Giải nénfile minipar-0.5-Linux32.tgz dùng lệnh tar
tar xvfz minipar-0.5-Linux32.tgz

sau đó đổi tên thư mục vừa giải nén ra thánh minipar, xóa file tgz
mv minipar-0.5-Linux32 minipar
rm minipar-0.5-Linux32.tgz

Step 2: Thiết lập đường dẫn cho minipar. Với bash shell, thêm dòng sau vào file .bashrc
export MINIPATH=/cygdrive/d/workspaces/minipar

Step 3: Sử dụng pdemo để phân tích Dependency

Cài đặt Wordnet 3.0 (Step by step)

Bài viết này trình bày cách cài đặt English Wordnet 3.0 (Từ điển từ vựng điện tử) trên Unix hoặc Cygwin từ mã nguồn

Step 0: Download mã nguồn của Wordnet 3.0 tại địa chỉ http://wordnetcode.princeton.edu/3.0/WordNet-3.0.tar.gz vào một thư mục nào đó chẳng hạn /home/user-name/nlp/src

Step 1: Chuyển vào thư mục chứa file mã nguồn (lệnh cd), giải nén file vừa Download
$tar xvfz WordNet-3.0.tar.gz

Step 2: Chuyển vào thư mục vừa giải nén, trong TH này là: ~/nlp/src/WordNet-3.0

Step 3: Cấu hình file make, dùng lệnh
$./configure  –prefix=~/nlp/local-tools/wn-3.0

Lệnh này sẽ chỉ ra đường dẫn để cài đặt Wordnet 3.0. Ở đây tôi muốn đặt đường dẫn tại ~/nlp/local-tools/wn-3.0

Step 4: Sau khi thực thi lệnh configure thành công, gõ lệnh make để biên dịch mã nguồn
make

Step 5: Install
$make install

Sau khi cài đặt thành công, ta phải cấu hình đường dẫn mới có thể sử dụng WordNet

Step 6: Tạo biến môi trường WNHOME là đường dẫn tới thư mục mà ta cài đặt WordNet, ở đây là /home/user-name/nlp/local-tools/wn-3.0
Nếu shell đang sử dụng là bash, thêm vào dòng
export WNHOME=/home/user-name/nlp/local-tools/wn-3.0

Thêm đường dẫn thư mục bin (file binary) của wordnet 3.0 vào đường dẫn PATH
export PATH=/home/minhpqn/nlp/local-tools/wn-3.0/bin:$PATH

Bây giờ có thể sử dụng wordnet rồi đó. Cheer!

 

Berkeley DB Install

NLP Tools

Đọc, ghi text file với C++

(1) Đọc từng dòng của một file text vào một mảng các string, bỏ qua dòng trống

// read_line.cpp
// read all lines of a text file into an array of strings

#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>

using namespace std;

// remove space after the string s
void rtrim(char *s)
{
unsigned int len = strlen(s);

while (len > 0 && s[len-1] == ‘ ‘) len–;
s[len] = 0;
}

void readToArr(char* fileName, vector<string> & arr)
{
ifstream fin(fileName, ifstream::in);
char line[10000];

while (fin.getline(line, 1000)) {
rtrim(line);
if (strlen(line) == 0) continue;
arr.push_back(line);
}
fin.close();
}

int main(int argc, char* argv[])
{
vector<string> arr;

readToArr(argv[1], arr);

// print all line in arr
vector<string>::iterator it;

for( it = arr.begin(); it < arr.end(); it++ )
{
cout << *it << endl;
}
return 0;
}

Kiểm tra một xâu nằm trong xâu khác

def is_substr?(str1, str2)
re = Regexp.new(str1)
if re =~ str2
return true
else
return false
end
end

Một vài địa chỉ tốt cho người học lập trình ruby

Ruby forum: http://www.ruby-forum.com/ ; diễn đàn tốt, có thể đặt câu hỏi hoặc thảo luận

Ruby Programming Language: http://www.ruby-lang.org/en/ ;  Có thể download phiên bản ruby mới nhất, cập nhật các thông tin về sự phát triển của ruby, tài liệu, etc

Ruby Reference: http://www.ruby-lang.org/en/

IDE tốt cho Ruby: Mặc dù khá nặng nhưng NetBean vẫn là IDE tốt nhất cho Ruby mà tôi từng dùng: http://www.netbeans.org/downloads/

The Machine Learning forum

http://themachinelearningforum.org/