[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
18/02/2012 18:39:58 (+0700) | #1 | 254393 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
Giả sử mình có một thư mục ca nhạc với tên file là tiếng Việt có dấu:
Code:
Le Cat Trong Ly
├── Chênh vênh (guitar version).mp3
├── Chênh vênh.mp3
├── Chuyến xe.mp3
├── Cơn bão nghiêng đêm.mp3
├── Giấc mộng lớn.mp3
├── Hương lạc.mp3
├── Không tên.mp3
├── Lúng ta lúng túng.mp3
├── Mùa yêu.mp3
└── Trời ơi.mp3
Khi tạo playlist:
Code:
$ find Le\ Cat\ Trong\ Ly -type f -iname '*.mp3' | sort | sed 's/\//\\/' > Le\ Cat\ Trong\ Ly.mpl
rồi copy vào SL45 _http://sl4x.com/ thì file playlist không hiển thị được tiếng Việt nên gặp lỗi "File not found" khi chạy.
Có bạn nào hứng thú đổi tên của những file này thành tiếng Việt không dấu bằng shell script không nhỉ?
Code:
Le Cat Trong Ly
├── Chenh venh.mp3
├── Chuyen xe.mp3
├── Con bao nghieng đem.mp3
├── ...
|
|
Let's build on a great foundation! |
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
18/02/2012 19:07:34 (+0700) | #2 | 254398 |
|
mylove14129
Member
|
0 |
|
|
Joined: 27/04/2008 19:07:19
Messages: 106
Offline
|
|
cách đơn giản nhất là làm cái xâu chứa dấu và một xâu để thay thế, sau đó replace |
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
18/02/2012 19:17:39 (+0700) | #3 | 254399 |
hieuneo
Member
|
0 |
|
|
Joined: 06/02/2009 13:51:04
Messages: 21
Offline
|
|
newname=""
list=`ls |grep .mp3 > list.txt`
while read line
do
oldname=$line
newname=`echo "$oldname"| tr '[:upper:]' '[:lower:]'`
newname=`echo $newname| sed 's/\ /-/g'`
newname=`echo $newname| sed 's/[a á à ả ã ạ]/a/g'`
newname=`echo $newname| sed 's/[â ấ ầ ẩ ẫ ậ]/a/g'`
newname=`echo $newname| sed 's/[e é è ẻ ẽ ẹ]/e/g'`
newname=`echo $newname| sed 's/[ê ế ề ể ễ ệ]/e/g'`
newname=`echo $newname| sed 's/[i í ì ỉ ĩ ị]/i/g'`
newname=`echo $newname| sed 's/[o ó ò ỏ õ ọ]/o/g'`
newname=`echo $newname| sed 's/[ô ố ồ ổ ỗ ộ]/o/g'`
newname=`echo $newname| sed 's/[ơ ớ ờ ở ỡ ợ]/o/g'`
newname=`echo $newname| sed 's/[u ú ù ủ ũ ụ]/u/g'`
newname=`echo $newname| sed 's/[ư ứ ừ ử ữ ự]/u/g'`
newname=`echo $newname| sed 's/[y ý ỳ ỷ ỹ ỵ]/y/g'`
newname=`echo $newname| sed 's/đ/d/g'`
echo $newname
mv "$oldname" "$newname"
done < list.txt
rm -rf list.txt
#make-list
ls|grep .mp3|sort > list.txt
Của anh đây ), em mới viết một script hôm qua xong , nay e bổ xung thêm cái tiếng việt như a cần )
em replace luôn khoảng trắng thành "-"
output:
music/
|-- chenh-venh-(guitar-version).mp3
|-- chenh-venh.mp3
|-- chuyen-xe.mp3
|-- con-bao-nghieng-dem.mp3
|-- giac-mong-lon.mp3
|-- huong-lac.mp3
|-- khong-ten.mp3
|-- list.txt
|-- lung-ta-lung-tung.mp3
|-- mua-yeu.mp3
|-- rename-unicode-vn.sh
`-- troi-oi.mp3
|
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
19/02/2012 15:58:35 (+0700) | #4 | 254493 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
@hieuneo: giả sử mình vẫn thích để khoảng trắng (không dùng cách chuyển thành gạch ngang rồi chuyển ngược lại), bạn thử viết cả đoạn trên thành one-liner xem. |
|
Let's build on a great foundation! |
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
19/02/2012 17:36:54 (+0700) | #5 | 254504 |
hieuneo
Member
|
0 |
|
|
Joined: 06/02/2009 13:51:04
Messages: 21
Offline
|
|
script trên công nhận là dài dòng và chưa tối ưu a ạ
e viết lại cái này chắc ngắn hơn
Code:
for oldname in *.mp3; do newname=`echo $oldname| sed 's/[aáàảãạâấầẩẫậ]/a/g'| sed 's/[eéèẻẽẹêếềểễệ]/e/g'| sed 's/[iíìỉĩị]/i/g'| sed 's/[oóòỏõọôốồổỗộơớờởỡợ]/o/g'|sed 's/[uúùủũụưứừửữự]/u/g'| sed 's/[yýỳỷỹỵ]/y/g'| sed 's/[đ]/d/g'`; echo $newname; mv "$oldname" "$newname"; done
Output:
music2/
|-- Chenh\ venh\ (guitar\ version).mp3
|-- Chenh\ venh.mp3
|-- Chuyen\ xe.mp3
|-- Con\ bao\ nghieng\ dem.mp3
|-- Giac\ mong\ lon.mp3
|-- Huong\ lac.mp3
|-- Khong\ Ten.mp3
|-- lung\ ta\ lung\ tung.mp3
|-- Mua\ yeu.mp3
`-- Troi\ oi.mp3
|
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
19/02/2012 18:08:13 (+0700) | #6 | 254508 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
Có cách nào không pipe sed to sed không nhỉ ? |
|
Let's build on a great foundation! |
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
19/02/2012 18:56:07 (+0700) | #7 | 254512 |
hieuneo
Member
|
0 |
|
|
Joined: 06/02/2009 13:51:04
Messages: 21
Offline
|
|
hóa ra sed này còn hỗ trợ multiple patterns
Code:
for oldname in .mp3; do newname=`echo $oldname| sed 's/[aáàảãạâấầẩẫậ]/a/g; s/[eéèẻẽẹêếềểễệ]/e/g; s/[iíìỉĩị]/i/g; s/[oóòỏõọôốồổỗộơớờởỡợ]/o/g; s/[uúùủũụưứừửữự]/u/g; s/[yýỳỷỹỵ]/y/g; s/[đ]/d/g'`; echo $newname; mv "$oldname" "$newname"; done
hình như còn -e nữa phải không a quanta.
A quanta còn cách nào nữa không ? |
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
19/02/2012 19:06:34 (+0700) | #8 | 254513 |
tuxevil
Member
|
0 |
|
|
Joined: 19/02/2012 06:29:06
Messages: 2
Offline
|
|
Theo em biết thì có 2 cách để tránh pipe sed to sed
Cách 1 : Dùng sed với option "-e" :
Code:
for oldname in *.mp3; do newname=`echo $oldname|sed -e 's/[aáàảãạâấầẩẫậ]/a/g' -e 's/[eéèẻẽẹêếềểễệ]/e/g' -e 's/[iíìỉĩị]/i/g' -e 's/[oóòỏõọôốồổỗộơớờởỡợ]/o/g' -e 's/[uúùủũụưứừửữự]/u/g' -e 's/[yýỳỷỹỵ]/y/g' -e 's/[đ]/d/g'`; echo $newname; mv "$oldname" "$newname"; done
Cách 2 : Sử dụng "-f":
Ví dụ tạo 1 file vn_lowercase.sed với nội dung :
s/[aáàảãạâấầẩẫậ]/a/g
s/[eéèẻẽẹêếềểễệ]/e/g
s/[iíìỉĩị]/i/g
s/[oóòỏõọôốồổỗộơớờởỡợ]/o/g
s/[uúùủũụưứừửữự]/u/g
s/[yýỳỷỹỵ]/y/g
s/[đ]/d/g
Và lệnh sau:
Code:
for oldname in *.mp3; do newname=`echo $oldname|sed -f ../vn_lowercase.sed`; echo $newname; mv "$oldname" "$newname"; done
|
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
19/02/2012 19:20:55 (+0700) | #9 | 254515 |
hieuneo
Member
|
0 |
|
|
Joined: 06/02/2009 13:51:04
Messages: 21
Offline
|
|
còn lệnh rename nữa, ai đã thử rename với lệnh này chưa |
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
19/02/2012 20:43:52 (+0700) | #10 | 254524 |
idid231
Member
|
0 |
|
|
Joined: 03/06/2011 09:36:19
Messages: 32
Offline
|
|
Em xin mạn phép chen tay hỏi ngu một câu.
Theo như e thấy thì thuật toán ở đây là scan xem ở đâu có dấu thì thay trở về chữ thường không dấu. May mắn là số lượng nguyên âm ít nên mảng cũng ít phần tử.
Trên thực tế em thấy nhu cầu convert từ không dấu sang có dấu cũng khá cần thiết, bởi vẫn còn khá nhiều các phần mềm không hỗ trợ tiếng việt, báo lỗi không đọc đc. Như vậy ta sẽ phải chuyển toàn bộ file sau khi convert về dạng có dấu. Em có sử dụng tính năng này trên một trang web, nó cho phép chuyển các comment ở máy không có unikey sang dạng có dấu, các dấu, mũ và móc em thấy đặt khá chính xác nên câu cú không bị mất nghĩa.
Vậy em muốn hỏi là cái thuật toán chuyển từ không dấu thành có dấu ấy nó như thế nào? Các anh có thể cho em xin ý tưởng để hình dung nó được không ạ, em chưa hình dung đc nó thế nào |
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
20/02/2012 10:04:05 (+0700) | #11 | 254593 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
idid231 wrote:
Vậy em muốn hỏi là cái thuật toán chuyển từ không dấu thành có dấu ấy nó như thế nào? Các anh có thể cho em xin ý tưởng để hình dung nó được không ạ, em chưa hình dung đc nó thế nào
Mình thử Google thì tìm được cái này: http://www.cs.hcmus.edu.vn/elib/bitstream/123456789/112574/1/0112267.pdf, bạn tham khảo xem.
Tình cờ hôm qua cũng thấy một bạn submit tính năng này lên commandlinefu: http://www.commandlinefu.com/commands/view/10268/thm-du-ting-vit-t-ng. Lưu ý là bạn ấy thiếu mất dấu nháy đơn ở cuối nhé. Bạn cũng có thể liên lạc để hỏi thêm.
Test phát
Code:
$ curl http://vietlabs.com/vietizer/vietizer.php -d 'INPUT=em dang o truong, anh den ngay nhe, em muon lam roi&R1=1' | grep "<br>" | sed 's/<br>//g'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 250 0 188 100 62 86 28 0:00:02 0:00:02 --:--:-- 105
Kết quả:
em đang ở trường, anh đến ngày nhẹ, em muốn làm rồi
|
|
Let's build on a great foundation! |
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
20/02/2012 18:29:23 (+0700) | #12 | 254665 |
hieuneo
Member
|
0 |
|
|
Joined: 06/02/2009 13:51:04
Messages: 21
Offline
|
|
e thấy ý kiến của idid231 cũng hay, hôm qua nghiên cứu nhưng trước mắt là chịu vì văn phạm Tiếng Việt mình còn chưa thông được hết , nên không nghĩ đến việc viết Tool , nên cũng tìm hiểu xem có trang nào cho mình "ké" được không
khi submit lên e quên dấu nháy
|
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
20/02/2012 20:37:06 (+0700) | #13 | 254672 |
idid231
Member
|
0 |
|
|
Joined: 03/06/2011 09:36:19
Messages: 32
Offline
|
|
Rất cảm ơn các anh đã lắng nghe ý kiến của em :X
Tệp pdf của anh quanta thực sự rất hữu ích, phân tích rất rõ ràng :X Em sẽ cố gắng dành thời gian học 1 ngôn ngữ để viết được một phần mềm có tác dụng covert qua lại giữa có dấu và không dấu |
|
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
03/06/2012 15:35:13 (+0700) | #14 | 264521 |
|
chiro8x
Member
|
0 |
|
|
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
|
|
em đang ở trường, anh đến ngày nhẹ, em muốn làm rồi
Đoạn này mà nó dịch "em muốn lắm rồi" thì khó đỡ thật. Em có test qua nhưng không hài lòng lắm, mặc dù đề tài này thực sự rất hay . Nếu làm một con bot tìm kiếm "tri thức" trên internet rồi tự động correct chắc hay hơn. |
|
while(1){} |
|
|
|
[Programming] Đổi tên hàng loạt file từ tiếng Việt có dấu thành không dấu |
05/06/2012 18:24:52 (+0700) | #15 | 264709 |
|
noWhere_Man
Member
|
0 |
|
|
Joined: 19/10/2005 04:21:47
Messages: 38
Location: Tsinghua
Offline
|
|
Về việc chuyển tiếng Việt từ không dấu sang có dấu, mọi người có thể tham khảo bài báo này
http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=5174609&url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5174598%2F5174599%2F05174609.pdf%3Farnumber%3D5174609
(ngày xưa mình down free được, chẳng hiểu sao giờ ko tìm thấy link pdf, nếu bạn nào tìm mà ko ra chỗ để down thì PM mình)
Đây có thể xem là một bài toán của lĩnh vực NLP. Mình đã từng tham khảo bài báo này + dùng thuật toán Viterbi để thực hiện, kết quả Pre = 89,5%, so với kết quả của luận văn mà anh quanta dẫn link thì cao hơn một chút (86.9%)
Đang có ý tưởng phát triển viết một phần mềm gõ tiếng Việt tự động thêm dấu mà chưa có thời gian. Bạn nào có hứng thú thì pm nhé
PS: ví dụ trên, chương trình của mình cho kết quả là
em đang ở trường, anh đến ngay nhe, em muốn lắm rồi
vẫn còn hơi lởm, hehe |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|