
A API OpenHownet é desenvolvida pela Thunlp, que fornece uma maneira conveniente de pesquisar informações no HowNet, exibir árvores sememas, calcular a similaridade de palavras via sememas, etc. Você também pode visitar nosso site para desfrutar de pesquisas e exibir sememas de palavras online.
Se você usar algum dado ou API fornecida pela OpenHownet em sua pesquisa, cite o seguinte artigo:
@article{qi2019openhownet,
title={OpenHowNet: An Open Sememe-based Lexical Knowledge Base},
author={Qi, Fanchao and Yang, Chenghao and Liu, Zhiyuan and Dong, Qiang and Sun, Maosong and Dong, Zhendong},
journal={arXiv preprint arXiv:1901.09957},
year={2019},
}
O que é a base de conhecimento mais típica do sememante . Um semese é definido como a unidade semântica mínima na linguística, e alguns linguistas acreditam que os significados de todas as palavras em qualquer idioma podem ser representados por um conjunto limitado de sememas. Zhendong Dong e seu filho Qiang Dong colocaram essa idéia em prática e passaram quase 30 anos construindo Hownet, que predefine cerca de 2.000 sememas e os usa para anotar mais de 200.000 sentidos de palavras em inglês e chinês.
Desde que o Hownet foi construído, ele foi amplamente utilizado em várias tarefas de PNL. Você pode se referir a esta lista de artigos para dar uma olhada em todos os estudos relacionados à WOLNET.
O arquivo de dados principal do HowNet (a saber, o Dicionário do HowNet que pode ser baixado aqui) consiste em 237.973 conceitos (ou sentidos) representados por palavras e frases chinesas e inglesas. Cada conceito no HowNet é anotado com uma definição baseada no sememante, a tag POS, orientação de sentimentos, frases de exemplo, etc. Aqui está um exemplo de como os conceitos são anotados no HowNet:
NO.=000000026417 # Concept ID
W_C=不惜 # Chinese word
G_C=verb # POS tag of the Chinese word
S_C=PlusFeeling|正面情感 # Sentiment orientation
E_C=~牺牲业余时间,~付出全部精力,~出卖自己的灵魂 # Example sentences of the Chinese word
W_E=do not hesitate to # English word
G_E=verb # POS tag of the English word
S_E=PlusFeeling|正面情感 # Sentiment orientation
E_E= # Example sentences of the English word
DEF={willing|愿意} # Sememe-based definition
RMK=
Você pode escolher um dos dois métodos a seguir para instalar a API OpenHownet.
pip install OpenHowNetgit clone https://github.com/thunlp/OpenHowNet/
cd OpenHowNet
python setup.py installOs seguintes trechos de código ilustram algumas funções básicas da API OpenHownet. Você também pode baixar este notebook Jupyter para executar o código. Para obter mais funções e informações detalhadas, procure nossa documentação.
import OpenHowNet
hownet_dict = OpenHowNet . HowNetDict () Um erro ocorrerá se você não baixar os dados do HowNet. Nesse caso, você precisa executar OpenHowNet.download() primeiro.
Por padrão, a API pesquisará como todos os conceitos (sentidos) representados pela palavra dada (em inglês ou chinês) e devolverá uma lista de instâncias na classe Sense. Você também pode definir o idioma para reduzir o tempo de pesquisa. Se a palavra dada não existir no HowNet, esta API retornará uma lista vazia.
> >> # Get all the senses represented by the word "苹果".
>> > result_list = hownet_dict . get_sense ( "苹果" )
> >> print ( "The number of retrievals: " , len ( result_list ))
The number of retrievals : 8
> >> print ( "An example of retrievals: " , result_list )
An example of retrievals : [ No . 244401 | apple |苹果, No . 244402 | malus pumila |苹果, No . 244403 | orchard apple tree |苹果, No . 244396 | apple |苹果, No . 244397 | apple |苹果, No . 244398 | IPHONE |苹果, No . 244399 | apple |苹果, No . 244400 | iphone |苹果]Você pode obter as informações detalhadas de um sentido pela instância dos sentidos.
> >> sense_example = result_list [ 0 ]
> >> print ( "Sense example:" , sense_example )
Sense example : No . 244401 | apple |苹果
> >> print ( "Sense id: " , sense_example . No )
Sense id : 000000244401
> >> print ( "English word in the sense: " , sense_example . en_word )
English word in the sense : apple
> >> print ( "Chinese word in the sense: " , sense_example . zh_word )
Chinese word in the sense : 苹果
> >> print ( "HowNet Def of the sense: " , sense_example . Def )
HowNet Def of the sense : { tree |树:{ reproduce |生殖: PatientProduct = { fruit |水果}, agent = { ~ }}}
>> > print ( "Sememe list of the sense: " , sense_example . get_sememe_list ())
Sememe list of the sense : { fruit |水果, tree |树, reproduce |生殖}Você pode visualizar a definição estruturada de um sentido baseado em sememos (a saber, a "árvore sememe")
> >> sense_example . visualize_sememe_tree ()
[ sense ] No .244401 | apple |苹果
└── [ None ] tree |树
└── [ agent ] reproduce |生殖
└── [ PatientProduct ] fruit |水果O pacote fornece API para obter todos os sentidos, palavras e sememas no HowNet.
> >> all_senses = hownet_dict . get_all_senses ()
> >> print ( "The number of all senses: {}" . format ( len ( all_senses )))
The number of all senses : 237974
> >> zh_word_list = hownet_dict . get_zh_words ()
> >> print ( "Chinese words in HowNet: " , zh_word_list [: 30 ])
Chinese words in HowNet : [ '' , '"' , '#' , '#号标签' , '$' , '$.J.' , '$A.' , '$NZ.' , '%' , "'" , '(' , ')' , '*' , '+' , ',' , '-' , '--' , '.' , '...' , '...为止' , '...也同样使然' , '...以上' , '...以内' , '...以来' , '...何如' , '...内' , '...出什么问题' , '...发生了什么' , '...发生故障' , '...家里有几口人' ]
> >> en_word_list = hownet_dict . get_en_words ()
> >> print ( "English words in HowNet: " , en_word_list [: 30 ])
English words in HowNet : [ 'A' , 'An' , 'Frenchmen' , 'Frenchwomen' , 'Ottomans' , 'a' , 'aardwolves' , 'abaci' , 'abandoned' , 'abbreviated' , 'abode' , 'aboideaux' , 'aboiteaux' , 'abscissae' , 'absorbed' , 'acanthi' , 'acari' , 'accepted' , 'acciaccature' , 'acclaimed' , 'accommodating' , 'accompanied' , 'accounting' , 'accused' , 'acetabula' , 'acetified' , 'aching' , 'acicula' , 'acini' , 'acquired' ]
> >> all_sememes = hownet_dict . get_all_sememes ()
> >> print ( 'There are {} sememes in HowNet' . format ( len ( all_sememes )))
There are 2540 sememes in HowNet Você pode recuperar definições baseadas em sememas dos sentidos representados pela palavra dada. Por padrão, o pacote recuperará todos os sentidos representados pela palavra e devolverá sua lista de sementes separadamente.
> >> hownet_dict . get_sememes_by_word ( word = '苹果' , display = 'list' , merge = False , expanded_layer = - 1 , K = None )
[{ 'sense' : No . 244396 | apple |苹果,
'sememes' : { PatternValue |样式值, SpeBrand |特定牌子, able |能, bring |携带, computer |电脑}},
{ 'sense' : No . 244397 | apple |苹果,
'sememes' : { fruit |水果}},
{ 'sense' : No . 244398 | IPHONE |苹果,
'sememes' : { PatternValue |样式值, SpeBrand |特定牌子, able |能, bring |携带, communicate |交流, tool |用具}},
{ 'sense' : No . 244399 | apple |苹果,
'sememes' : { PatternValue |样式值, SpeBrand |特定牌子, able |能, bring |携带, communicate |交流, tool |用具}},
{ 'sense' : No . 244400 | iphone |苹果,
'sememes' : { PatternValue |样式值, SpeBrand |特定牌子, able |能, bring |携带, communicate |交流, tool |用具}},
{ 'sense' : No . 244401 | apple |苹果,
'sememes' : { fruit |水果, reproduce |生殖, tree |树}},
{ 'sense' : No . 244402 | malus pumila |苹果,
'sememes' : { fruit |水果, reproduce |生殖, tree |树}},
{ 'sense' : No . 244403 | orchard apple tree |苹果,
'sememes' : { fruit |水果, reproduce |生殖, tree |树}}] Ao alterar display , os sememas de um sentido podem ser exibidos no formulário de lista ( list ), formulário de dicionário ( dict ), forma de nó de árvore ( tree ) e formulário de visualização ( visual ).
# Get the sememes in the form of dictionary
> >> hownet_dict . get_sememes_by_word ( word = '苹果' , display = 'dict' )[ 0 ]
{ 'sense' : No . 244396 | apple |苹果, 'sememes' : { 'role' : 'sense' , 'name' : No . 244396 | apple |苹果, 'children' : [{ 'role' : 'None' , 'name' : computer |电脑, 'children' : [{ 'role' : 'modifier' , 'name' : PatternValue |样式值, 'children' : [{ 'role' : 'CoEvent' , 'name' : able |能, 'children' : [{ 'role' : 'scope' , 'name' : bring |携带, 'children' : [{ 'role' : 'patient' , 'name' : '$' }]}]}]}, { 'role' : 'patient' , 'name' : SpeBrand |特定牌子}]}]}}
# Get the sememes in the form of tree node (get the root node of the sememe tree)
> >> d . get_sememes_by_word ( word = '苹果' , display = 'tree' )[ 0 ]
{ 'sense' : No . 244396 | apple |苹果, 'sememes' : Node ( '/No.244396|apple|苹果' , role = 'sense' )}
# Visualize the sememes (Set K to control the num of visualized tree to print)
> >> d . get_sememes_by_word ( word = '苹果' , display = 'visual' , K = 2 )
Find 8 result ( s )
Display #0 sememe tree
[ sense ] No .244396 | apple |苹果
└── [ None ] computer |电脑
├── [ modifier ] PatternValue |样式值
│ └── [ CoEvent ] able |能
│ └── [ scope ] bring |携带
│ └── [ patient ]$
└── [ patient ] SpeBrand |特定牌子
Display #1 sememe tree
[ sense ] No .244397 | apple |苹果
└── [ None ] fruit |水果Além disso, ao display=='list' , você pode optar por mesclar todas as listas do semese em uma e limitar a camada de expansão das árvores sememas alterando o parâmetro expanded_layer (-1 significa expandir todas as camadas).
> >> hownet_dict . get_sememes_by_word ( word = '苹果' , display = 'list' , merge = True , expanded_layer = - 1 , K = None )
{ PatternValue |样式值, SpeBrand |特定牌子, able |能, bring |携带, communicate |交流, computer |电脑, fruit |水果,
reproduce |生殖, tool |用具, tree |树}Você pode obter o relacionamento entre dois sememas inserindo as palavras (inglês ou chinês) que representam os sememas. Você pode optar por mostrar os trigêmeos de (sememe1, relação, sememe2).
> >> relations = hownet_dict . get_sememe_relation ( 'FormValue' , '圆' , return_triples = False )
> >> print ( relations )
'hyponym'
> >> triples = hownet_dict . get_sememe_relation ( 'FormValue' , '圆' , return_triples = True )
> >> print ( triples )
[( FormValue |形状值, 'hyponym' , round |圆)]Você pode pesquisar todos os sememas que têm uma certa relação com um semese. Da mesma forma, um semema deve ser representado por uma palavra (inglês ou chinês), mas a relação deve estar em inglês minúsculo.
> >> triples = hownet_dict . get_related_sememes ( 'FormValue' , relation = 'hyponym' , return_triples = True )
> >> print ( triples )
[( FormValue |形状值, 'hyponym' , round |圆), ( FormValue |形状值, 'hyponym' , unformed |不成形), ( AppearanceValue |外观值, 'hyponym' , FormValue |形状值), ( FormValue |形状值, 'hyponym' , angular |角), ( FormValue |形状值, 'hyponym' , square |方), ( FormValue |形状值, 'hyponym' , netlike |网), ( FormValue |形状值, 'hyponym' , formed |成形)]A implementação é baseada no artigo:
Jiangming Liu, Jinan Xu, Yujie Zhang. Uma abordagem da estrutura hierárquica híbrida para computação de similaridade de palavras pela HowNet. Em Anais do IJCNLP 2013. [PDF]
Como existem alguns arquivos necessários para serem carregados para cálculo de similaridade, a sobrecarga de inicialização será maior do que antes.
Para começar, você pode inicializar o objeto hownet_dict da seguinte forma:
> >> hownet_dict_advanced = OpenHowNet . HowNetDict ( init_sim = True )
Initializing OpenHowNet succeeded !
Initializing similarity calculation succeeded !Você também pode adiar a inicialização do cálculo da similaridade até o uso.
> >> hownet_dict . initialize_similarity_calculation ()
Initializing similarity calculation succeeded !Você pode ter os sentidos que têm a mesma definição baseada em sememos com um sentido.
> >> s = hownet_dict_advanced . get_sense ( '苹果' )[ 0 ]
> >> hownet_dict_advanced . get_sense_synonyns ( s )[: 10 ]
[ No . 110999 | pear |山梨, No . 111007 | hawthorn |山楂, No . 111009 | haw |山楂树, No . 111010 | hawthorn |山楂树, No . 111268 | Chinese hawthorn |山里红, No . 122955 | Pistacia vera |开心果树, No . 122956 | pistachio |开心果树, No . 122957 | pistachio tree |开心果树, No . 135467 | almond tree |扁桃, No . 154699 | fig |无花果]A pesquisa de pacotes por sentidos representados pela palavra dada, obtém os sentidos mais próximos-k e retorna as palavras correspondentes. Observe que o idioma da palavra especificada deve ser definido.
Você também pode definir o POS das palavras, optar por produzir a similaridade e mesclar todas as palavras pertencentes aos sentidos de diferença em uma única lista, etc. Consulte a documentação para obter mais informações.
Se a palavra de entrada não estiver no HowNet, a API retornará uma lista vazia.
> >> hownet_dict_advanced . get_nearest_words ( '苹果' , language = 'zh' , K = 5 )
{ No . 244396 | apple |苹果: [ 'IBM' , '东芝' , '华为' , '戴尔' , '索尼' ],
No . 244397 | apple |苹果: [ '丑橘' , '乌梅' , '五敛子' , '凤梨' , '刺梨' ],
No . 244398 | IPHONE |苹果: [ 'OPPO' , '华为' , '苹果' , '智能手机' , '彩笔' ],
No . 244399 | apple |苹果: [ 'OPPO' , '华为' , '苹果' , '智能手机' , '彩笔' ],
No . 244400 | iphone |苹果: [ 'OPPO' , '华为' , '苹果' , '智能手机' , '彩笔' ],
No . 244401 | apple |苹果: [ '山梨' , '山楂' , '山楂树' , '山里红' , '开心果树' ],
No . 244402 | malus pumila |苹果: [ '山梨' , '山楂' , '山楂树' , '山里红' , '开心果树' ],
No . 244403 | orchard apple tree |苹果: [ '山梨' , '山楂' , '山楂树' , '山里红' , '开心果树' ]}
> >> hownet_dict_advanced . get_nearest_words ( '苹果' , language = 'zh' , K = 5 , merge = True )
[ 'IBM' , '东芝' , '华为' , '戴尔' , '索尼' ] Se qualquer uma das duas palavras dadas não existir no Hownet, ele retornará -1 .
> >> print ( 'The similarity of 苹果 and 梨 is {}.' . format ( hownet_dict_advanced . calculate_word_similarity ( '苹果' , '梨' )))
The similarity of 苹果 and 梨 is 1.0 .Este pacote integra a função de consulta para obter informações de synsets no Babelnet (Babelnet Synset). Babelnet é um dicionário multilíngue de enciclopédia composto de siníssimos Babelnet, cada um dos quais contém alguns sinônimos multilíngues que têm o mesmo significado. O trabalho a seguir anota os sememas para alguns sinalizadores de Babelnet, e a função nesta parte é baseada em seus resultados de anotação.
Para construir uma base multilíngue de conhecimento sememe: previsão de sememas para sinicatos de Babelnet . Fanchao Qi, Liang Chang, Maosong Sun, Sicong Ouyang e Zhiyuan Liu . AAAI-20. [PDF] [Código]
Para começar, você deve inicializar o Babelnet Synset Dictionary:
> >> hownet_dict . initialize_babelnet_dict ()
Initializing BabelNet synset Dict succeeded !
# Or you can initialize when create the HowNetDict instance
>> > hownet_dict_advanced = HowNetDict ( init_babel = True )
Initializing OpenHowNet succeeded !
Initializing BabelNet synset Dict succeeded !A API a seguir permite consultar as informações ricas em um Babelnet Synset (sinônimos de chinês e inglês, definições, URLs de imagem etc.).
> >> syn_list = hownet_dict_advanced . get_synset ( '黄色' )
> >> print ( "{} results are retrieved and take the first one as an example" . format ( len ( syn_list )))
3 results are retrieved and take the first one as an example
>> > syn_example = syn_list [ 0 ]
> >> print ( "Synset: {}" . format ( syn_example ))
Synset : bn : 00113968 a | yellow |黄
> >> print ( "English synonyms: {}" . format ( syn_example . en_synonyms ))
English synonyms : [ 'yellow' , 'yellowish' , 'xanthous' ]
> >> print ( "Chinese synonyms: {}" . format ( syn_example . zh_synonyms ))
Chinese synonyms : [ '黄' , '黄色' , '淡黄色+的' , '黄色+的' , '微黄色' , '微黄色+的' , '黄+的' , '淡黄色' ]
> >> print ( "English glosses: {}" . format ( syn_example . en_glosses ))
English glosses : [ 'Of the color intermediate between green and orange in the color spectrum; of something resembling the color of an egg yolk' , 'Having the colour of a yolk, a lemon or gold.' ]
> >> print ( "Chinese glosses: {}" . format ( syn_example . zh_glosses ))
Chinese glosses : [ '像丝瓜花或向日葵花的颜色。' ]Você pode obter os sinalizadores Babelnet relacionados com um determinado Synset.
> >> related_synsets = syn_example . get_related_synsets ()
> >> print ( "There are {} synsets that have relation with the {}, they are: " . format ( len ( related_synsets ), syn_example ))
There are 6 synsets that have relation with the bn : 00113968 a | yellow |黄, they are :
>> > print ( related_synsets )
[ bn : 00099663 a | chromatic |彩色, bn : 00029925 n | egg_yolk |蛋黄, bn : 00092876 v | resemble |相似, bn : 00020726 n | color |颜色, bn : 00020748 n | visible_spectrum |可见光, bn : 00081866 n | yellow |黄色]Você pode obter os sememas do Babelnet Sininsets inserindo a palavra nos siness Babelnet:
> >> print ( hownet_dict_advanced . get_sememes_by_word_in_BabelNet ( '黄色' ))
[{ 'synset' : bn : 00113968 a | yellow |黄, 'sememes' : [ yellow |黄]}, { 'synset' : bn : 00101430 a | dirty |淫秽的, 'sememes' : [ lascivious |淫, dirty |龊, despicable |卑劣, BadSocial |坏风气]}, { 'synset' : bn : 00081866 n | yellow |黄色, 'sememes' : [ yellow |黄]}]
> >> print ( hownet_dict_advanced . get_sememes_by_word_in_BabelNet ( '黄色' , merge = True ))
[ lascivious |淫, despicable |卑劣, BadSocial |坏风气, dirty |龊, yellow |黄]Para obter instruções mais detalhadas, consulte a documentação.
Se o código ou os dados o ajudarem, cite o seguinte artigo:
@article{qi2019openhownet,
title={Openhownet: An open sememe-based lexical knowledge base},
author={Qi, Fanchao and Yang, Chenghao and Liu, Zhiyuan and Dong, Qiang and Sun, Maosong and Dong, Zhendong},
journal={arXiv preprint arXiv:1901.09957},
year={2019}
}