
OpenHownet API es desarrollada por ThunLP, que proporciona una forma conveniente de buscar información en Hownet, mostrar árboles sememe, calcular la similitud de palabras a través de sememes, etc. También puede visitar nuestro sitio web para disfrutar de buscar y exhibir sememes de palabras en línea.
Si usa cualquier dato o API proporcionado por OpenHownet en su investigación, cite el siguiente documento:
@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},
}
Hownet es la base de conocimiento sememe más típica. Un sememe se define como la unidad semántica mínima en la lingüística, y algunos lingüistas creen que los significados de todas las palabras en cualquier idioma pueden estar representados por un conjunto limitado de sememes. El Sr. Zhendong Dong y su hijo Qiang Dong pusieron en práctica esta idea, y pasaron casi 30 años construyendo Hownet, que predefine alrededor de 2,000 sememes y los usa para anotar más de 200,000 sentidos de palabras inglesas y chinas.
Desde que se construyó Hownet, se ha utilizado ampliamente en varias tareas de PNL. Puede referirse a esta lista de documentos para echar un vistazo a todos los estudios relacionados con el howntet.
Hownet Core Data File (a saber, el Diccionario de Hownet que se puede descargar aquí) consta de 237,973 conceptos (o sentidos) representados por palabras y frases chinas e inglesas. Cada concepto en Hownet se anota con una definición basada en sememe, la etiqueta POS, la orientación del sentimiento, las oraciones de ejemplo, etc. Aquí hay un ejemplo de cómo los conceptos se anotan en 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=
Puede elegir cualquiera de los siguientes dos métodos para instalar OpenHownet API.
pip install OpenHowNetgit clone https://github.com/thunlp/OpenHowNet/
cd OpenHowNet
python setup.py installLos siguientes fragmentos de código ilustran algunas funciones básicas de la API OpenHownet. También puede descargar este cuaderno Jupyter para ejecutar el código. Para obtener más funciones e información detallada, pase a nuestra documentación.
import OpenHowNet
hownet_dict = OpenHowNet . HowNetDict () Se producirá un error si no ha descargado los datos de Hownet. En este caso, primero debe ejecutar OpenHowNet.download() .
De manera predeterminada, la API buscará a Hownet todos los conceptos (sentidos) representados por la palabra dada (en inglés o chino) y devolverá una lista de instancias en la clase Sense. También puede establecer el idioma para reducir el tiempo de búsqueda. Si la palabra dada no existe en Hownet, esta API devolverá una lista vacía.
> >> # 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 |苹果]Puede obtener la información detallada de un sentido por la instancia de sentido.
> >> 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 |生殖}Puede visualizar la definición estructurada basada en sememe de un sentido (es decir, el "árbol sememe")
> >> sense_example . visualize_sememe_tree ()
[ sense ] No .244401 | apple |苹果
└── [ None ] tree |树
└── [ agent ] reproduce |生殖
└── [ PatientProduct ] fruit |水果El paquete proporciona API para obtener todos los sentidos, palabras y sememes en 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 Puede recuperar definiciones basadas en sememe de los sentidos representados por la palabra dada. Por defecto, el paquete recuperará todos los sentidos representados por la palabra y devolverá su lista de sememe por separado.
> >> 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 |树}}] Al cambiar display , los sememes de un sentido se pueden mostrar en forma de lista ( list ), forma de diccionario ( dict ), forma de nodo de árbol ( tree ) y forma de visualización ( 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 |水果Además, cuando display=='list' , puede optar por fusionar todas las listas de sememe en una y limitar la capa de expansión de los árboles sememe cambiando el parámetro expanded_layer (-1 significa expandir todas las capas).
> >> 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 |树}Puede obtener la relación entre dos sememes ingresando las palabras (inglés o chino) que representan los sememes. Puede optar por mostrar los trillizos de (Sememe1, Relation, 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 |圆)]Puede buscar todos los sememes que tienen una cierta relación con un sememe. Del mismo modo, un sememe debe estar representado por una palabra (inglés o chino), pero la relación debe estar en inglés en minúsculas.
> >> 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 |成形)]La implementación se basa en el documento:
Jiangming Liu, Jinan Xu, Yujie Zhang. Un enfoque de la estructura jerárquica híbrida para la computación de similitud de palabras por Hownet. En Actas de IJCNLP 2013. [PDF]
Debido a que se deben cargar algunos archivos para el cálculo de la similitud, la sobrecarga de inicialización será mayor que antes.
Para empezar, puede inicializar el objeto hownet_dict de la siguiente manera:
> >> hownet_dict_advanced = OpenHowNet . HowNetDict ( init_sim = True )
Initializing OpenHowNet succeeded !
Initializing similarity calculation succeeded !También puede posponer la inicialización del cálculo de similitud hasta su uso.
> >> hownet_dict . initialize_similarity_calculation ()
Initializing similarity calculation succeeded !Puede obtener sentidos que tengan la misma definición basada en sememe con un 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 |无花果]El paquete busca sentidos representados por la palabra dada, obtiene los sentidos de Top-k más cercanos y devuelve las palabras correspondientes. Tenga en cuenta que se debe establecer el lenguaje de la palabra dada.
También puede establecer el POS de las palabras, elegir generar la similitud y fusionar todas las palabras que pertenecen a los sentidos de diferencia en una sola lista, etc. Consulte la documentación para obtener más información.
Si la palabra de entrada no está en Hownet, la API devuelve una lista vacía.
> >> 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' , '东芝' , '华为' , '戴尔' , '索尼' ] Si alguna de las dos palabras dadas no existe en Hownet, volverá -1 .
> >> print ( 'The similarity of 苹果 and 梨 is {}.' . format ( hownet_dict_advanced . calculate_word_similarity ( '苹果' , '梨' )))
The similarity of 苹果 and 梨 is 1.0 .Este paquete integra la función de consulta para la información de los sinsets en Babelnet (Babelnet Synset). Babelnet es un diccionario de enciclopedia multilingüe compuesto de sinsets Babelnet, cada uno de los cuales contiene algunos sinónimos multilingües que tienen el mismo significado. El siguiente trabajo anota sememes para algunos sinsets de Babelnet, y la función en esta parte se basa en sus resultados de anotación.
Hacia la construcción de una base multilingüe de conocimiento sememe: predicción de semiMes para sinsets de Babelnet . Fanchao Qi, Liang Chang, Maosong Sun, Sicong Ouyang y Zhiyuan Liu . AAAI-20. [PDF] [Código]
Para empezar, debe inicializar el diccionario Babelnet Synset:
> >> 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 !La siguiente API le permite consultar la rica información en un synset de Babelnet (sinónimos chinos e ingleses, definiciones, URL de imágenes, 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 : [ '像丝瓜花或向日葵花的颜色。' ]Puede obtener los sinsets de Babelnet relacionados con un synset dado.
> >> 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 |黄色]Puede obtener los sememes de los sinsets Babelnet ingresando la palabra en los sinsets de 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 obtener instrucciones más detalladas, consulte la documentación.
Si el código o los datos lo ayudan, cita el siguiente documento:
@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}
}