当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 查辞典和例句
帖子发表于 : 2007-11-22 10:18 
头像

注册: 2005-10-04 10:59
帖子: 1928
地址: 上海
送出感谢: 0 次
接收感谢: 1
忘了谁的源程序了,不能查例句,偏偏我例句查得很频繁。昨天晚上终于耐着性子给改写了。
代码:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys, urllib2, optparse
import cElementTree as ElementTree

def parseDict(xml):
    tree = ElementTree.fromstring(xml)
    word = tree.find('original-query').text
    customtrans = tree.findall('custom-translation')
    translist = []
    for node in customtrans:
        temp =[]
        for item in deepFindAll(node,'translation/content'):
            temp.append(item.text)
        translist.append([node.find('source/name').text,temp])
    return word, translist

def parseSentence(xml):
    tree = ElementTree.fromstring(xml)
    senlist = []
    for node in deepFindAll(tree,'example-sentences/sentence-pair'):
        senlist.append([node.find('sentence').text,
            node.find('sentence-translation').text])
    return senlist

def deepFindAll(element, tag):
    if type(tag) == type(''):       tag = tag.split('/')
    if tag == []:        return  [element]
    if len(tag) == 1:
        elist = []
        findres = element.findall(tag[0])
        if findres:     elist.extend(findres)
        for node in element:
            elist.extend(deepFindAll(node, tag[0]))
        return elist
    else:
        sublist = deepFindAll(element, tag[0])
        return deepFindAll(element, tag[1:])

if __name__=='__main__':
    parser = optparse.OptionParser()
    parser.add_option('-w', dest='word',action='store_true',
            default=False, help='print the translation of the word.')
    parser.add_option('-s', dest='sent',action='store_true',
            default=False, help='print sample sentences.')
    options, args = parser.parse_args(sys.argv[1:])
    xml1= urllib2.urlopen("http://dict.yodao.com/search?keyfrom=dict.python&q=" + '+'.join(args) + "&xmlDetail=true&doctype=xml").read()
    xml2= urllib2.urlopen("http://dict.yodao.com/search?keyfrom=dict.python&q=lj:" + '+'.join(args) + "&xmlDetail=true&doctype=xml").read()
    word, translist = parseDict(xml1)
    senlist = parseSentence(xml2)
    BOLD='\033[1m'
    DEFAULT='\033[m'
    UNDERLINE='\033[4m'
    MAGENTA='\033[35m'
    YELLOW='\033[33m'
    GREEN='\033[32m'
    RED='\033[31m'
    WHITE='\033[37m'
    BGWHITE='\033[47m'
    if options.word:
        print RED+BOLD+word+DEFAULT
        for item in translist:
            print MAGENTA+BGWHITE+item[0]+DEFAULT +': '\
                +GREEN+BOLD+ '; '.join(item[1]) + DEFAULT
    if options.sent:
        for item in senlist:
            print item[0].replace('<b>', YELLOW).replace('</b>', DEFAULT)
            print WHITE+UNDERLINE+item[1]+DEFAULT
    if not options.word and not options.sent:
        print RED+BOLD+word+DEFAULT
        for item in translist:
            print MAGENTA+BGWHITE+item[0]+DEFAULT +': '\
                +GREEN+BOLD+ '; '.join(item[1]) + DEFAULT
        for item in senlist[:7]:
            print item[0].replace('<b>', YELLOW).replace('</b>', DEFAULT)
            print WHITE+UNDERLINE+item[1]+DEFAULT



附件:
screenshot.png
screenshot.png [ 235.38 KiB | 被浏览 1355 次 ]



最后由 roylez 编辑于 2007-11-22 12:57,总共编辑了 1 次
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-11-22 12:17 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
代码:
lily@LLY:~$ ai python-celementtree
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
Reading state information... 完成     
python-celementtree 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 2 个软件未被升级。
lily@LLY:~$ dict ubuntu
Traceback (most recent call last):
  File "/home/lily/bin/dict", line 4, in <module>
    import cElementTree as ElementTree
ImportError: No module named cElementTree
lily@LLY:~$

为何啊?


_________________
关注我的blog: ε==3


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-11-22 12:44 
头像

注册: 2005-10-04 10:59
帖子: 1928
地址: 上海
送出感谢: 0 次
接收感谢: 1
我加了celementtree依赖,debian etch底下写的。也许ubuntu里面import的时候语句有所不同。
试试把
import cElementTree as ElementTree
改成
from elementtree import ElementTree

有点错,刚刚改了。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-11-22 13:08 
头像

注册: 2005-11-06 1:51
帖子: 1795
地址: 七彩云世界
送出感谢: 0 次
接收感谢: 0 次
按ls的。仍有错。
代码:
gonroad@ubuntu:~/linux/bin$ sudo apt-get install python-celementtree
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
Reading state information... 完成
python-celementtree 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 1 个软件未被升级。
gonroad@ubuntu:~/linux/bin$ dict unix
Traceback (most recent call last):
  File "/home/gonroad/linux/bin/dict", line 5, in <module>
    import cElementTree as ElementTree
ImportError: No module named cElementTree
gonroad@ubuntu:~/linux/bin$ 


_________________
佛出寺,求索真世界 For_Truth:Free_Open_Share
OPEN GPG KEY:03D18D95


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-01-03 17:05 

注册: 2007-10-31 7:51
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
代码:
try:
    from xml.etree import ElementTree # for Python 2.5 users
except ImportError:
    form elementtree import ElementTree


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-01-03 17:08 

注册: 2007-10-31 7:51
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
再附上一个我以前写的吧 :-)
www.dict.cn 取的数据。

代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import httplib
from xml.dom import minidom

class PyDict:
    def __init__(self):
        self.server = 'www.dict.cn'
        self.port   = 80
        self.url    = '/ws.php'
        self.method = 'POST'
        self.header = {'Content-Type':'application/x-www-form-urlencoded', 'User-Agent':'PyDict'}

    def query(self, word):
        word = str(word) # be sure a string
        if len(word.strip()) == 0:
            print 'Invalid input'
            return {}

        conn = httplib.HTTPConnection(self.server, self.port)
        # we make UTF-8 as default
        # TODO may raise an exception
        conn.request(self.method, self.url, 'utf8=true&q=' + word, self.header)
        res = conn.getresponse()
        # function parse just need a file like object
        xmldoc = minidom.parse(res)
        conn.close()

        # only one <def> element
        _def = xmldoc.getElementsByTagName('def')[0].firstChild.data
        # no such word
        if _def == 'Not Found':
            print _def
            return

        _pron = xmldoc.getElementsByTagName('pron')
        if _pron:
            _pron = _pron[0].firstChild.data
            _pron = _pron.split(', ')
            _pron = ', '.join(['[' + p +']' for p in _pron])
        else:
            _pron = ''

        # process sentences
        _sentences = xmldoc.getElementsByTagName('sent')
        if _sentences:
            # a empty list to store sentences
            _sent = [];

            for _sentence in _sentences:
                _orig = _sentence.firstChild.firstChild.data
                _tran = _sentence.lastChild.firstChild.data
                _sent.append((_orig, _tran))
           
            _sent = '\n'.join([sent[0] + '\n' + sent[1] for sent in _sent])
        else:
            _sent = ''

        _word = {}
        _word['pron'] = _pron
        _word['def'] = _def
        _word['sent'] = _sent

        return _word

if __name__ == '__main__':
    dict = PyDict()
    word = raw_input('->')
    while word != '#':
#       print '\n'.join(["%s:\n%s" % v for v in dict.query(word).items()])
        if len(word.strip()) != 0:
            result = dict.query(word)
            print result['pron']
            print result['def']
            print '例句:'
            print result['sent']

        word = raw_input('->')


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 查辞典和例句
帖子发表于 : 2009-07-02 15:45 
头像

注册: 2008-09-29 22:16
帖子: 168
送出感谢: 0 次
接收感谢: 0 次
Try this API: http://www.heihaier.org/?p=672


_________________
Keep it simple, stupid!
https://heiher.info


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译