[PYTHON] Essayez d'extraire les mots-clés populaires dans COTOHA

Procédure de demande prescrite

COTOHA API Portal

Merci. Je veux un iPad. C'est un article d'histoire car on dit que si vous écrivez un article d'histoire en utilisant COTOHA, vous obtiendrez un iPad (il y a un mauvais mot).

Qu'as-tu fait

Ceux qui veulent juste voir le code

Je l'ai mis dans [github] 4, alors jetez un œil. Seules les informations utilisateur requises pour accéder à COTOHA sont factices, veuillez donc les remplacer par vos propres informations.

Aperçu de ce que j'ai fait

La conclusion est l'analyse linguistique du titre et du synopsis de [Devenir romancier] 2.

[Devenir un romancier] 2 est un site de publication de romans sur le Web. Un roman est aussi une création, mais je pense qu'il a aussi un aspect ludique pour y accéder. S'il y a une histoire à la mode, lancez-vous et accédez aux œuvres qui deviendront le compteur. Dans un sens, il y a une culture proche d'Ogiri sur Twitter.

Donc, le point principal de cet article est d'essayer de pirater ce jeu avec l'analyse du langage. En regardant [COTOHA API Portal] 1, j'ai trouvé l'extraction de mots-clés et le calcul de similarité.

  1. Pouvez-vous extraire des mots-clés populaires du titre et du synopsis?
  2. Y a-t-il une corrélation entre la similitude entre le titre et le synopsis et la popularité?

Il semble que 1 peut être fait surement, mais quand j'écris 2 aussi, c'est une partie qui est sobre. Récemment, le titre est souvent au format phrase, donc le titre ≒ synopsis. Est-ce correct ou vaut-il mieux saisir des informations différentes du titre? Je suis curieux.

Comment l'avez-vous fait?

API Naro Novel

Le titre et le synopsis utilisent [Narurou Novel API] 3. C'est une API qui peut obtenir les informations générales du roman officiel de Naro.

Si vous souhaitez connaître les informations exactes, veuillez consulter [Document] 3. En gros, si vous attachez une requête à l'URL suivante avec GET et la lancez, C'est une API simple qui renvoie un aperçu du roman capturé.

https://api.syosetu.com/novelapi/api/

En fait, je voulais inclure les 10 premiers épisodes dans l'analyse, mais l'API officielle ne divulgue pas les informations textuelles. Certains sites ont affiné l'interface utilisateur en extrayant des données Je pense que je n'ai pas aimé la charge sur le serveur à cause de cela. C'est aussi moral d'utiliser le grattage pour faire quelque chose qui n'est pas officiel, alors je l'ai arrêté.

https://api.syosetu.com/novelapi/api/?out=json&lim=50&order=dailypoint

Par exemple, si vous souhaitez obtenir les 50 premiers éléments du classement quotidien avec json, cela ressemble à ceci. Je suis désolé de mettre une charge sur le serveur à chaque fois pendant le test, donc Avec cet outil, une fois que vous l'avez obtenu, vous l'enregistrez localement et vous le réutilisez. Au fait, le code ressemble à ceci.

url = 'https://api.syosetu.com/novelapi/api/'
param = {
    'out': 'json',
    'lim': '50',
    'order': 'dailypoint',
}
url_format = '{}?{}'.format(url, urllib.parse.urlencode(param))
res = requests.get(url=url_format)

Tout d'abord, le nombre de sorties du roman appelé all count est retourné, donc C'est un peu maladroit, mais vous devez éviter tous les comptes lorsque vous utilisez pour.

narou_datas = res.json()
for data in narou_datas:
    if 'title' in data:
        title = data['title']
        story = data['story']
        daily_point = data['daily_point'],

COTOHA API [Portail API COTOHA] 1 semble exiger un processus en deux étapes lors de son utilisation.

  1. Jetez vos informations d'identification et obtenez un jeton d'accès
  2. Utilisez l'API avec un jeton d'accès dans l'en-tête

1. Jetez vos informations d'identification et obtenez un jeton d'accès

url = 'https://api.ce-cotoha.com/v1/oauth/accesstokens'
header = {
    'Content-Type':'application/json'
}
param = {
    'grantType': 'client_credentials',
    'clientId': conf['clientId'],
    'clientSecret': conf['clientSecret'],
}
res = requests.post(url=url, headers=header, data=json.dumps(param))
access_token = res['access_token']

2. Utilisez l'API avec un jeton d'accès dans l'en-tête

Extraction de mots-clés

url = 'https://api.ce-cotoha.com/api/dev/nlp/v1/keyword'
header = {
    'Content-Type' : 'application/json;charset=UTF-8',
    'Authorization' :  f"Bearer {access_token}",
}
param = {
    'document': title,
    'type' : 'kuzure',
    'max_keyword_num' : 10,
}
res = requests.post(url=url, headers=header, data=json.dumps(param))
result = res['result']

Calcul de similarité

url = 'https://api.ce-cotoha.com/api/dev/nlp/v1/similarity'
header = {
    'Content-Type' : 'application/json;charset=UTF-8',
    'Authorization' :  f"Bearer {access_token}",
}
param = {
    's1': title,
    's2': story,
    'type' : 'kuzure',
}
res = requests.post(url=url, headers=header, data=json.dumps(param))
result = res['result']

Le résultat est?

1. Pouvez-vous extraire des mots-clés populaires du titre et du synopsis?

Cela a été largement réussi. Il semble que les 50 principaux cas ne soient pas biaisés de manière inattendue, Par exemple, il semble que le degré d'épidémie puisse être mesuré en l'exécutant régulièrement et en montrant la tendance à l'augmentation ou à la diminution.

Si vous extrayez les principaux résultats des 100 premiers résultats, "Compétence" "Ami d'enfance" "Expulsion" "Monde différent" "Musou" "Plus fort" "Isolation" "Mauvaise fille" N'est-ce pas une programmation généralement convaincante?

La plupart du temps, lors de la comparaison visuelle, certains mots clés devraient être corrigés.

Contient la nomenclature générale

Les nomenclatures courantes telles que «homme», «il» et «elle» entrent en tant que mots clés. Puisque ce sont des informations qui deviennent du bruit à partir de la signification originale d'un mot clé Il semble nécessaire de faire une liste d'exclusion et ainsi de suite.

Nomenclature complexe

Par exemple, "la vie lente la plus forte" était compté comme un mot clé. Si possible, comptez cela comme deux mots clés, "le plus fort" et "la vie lente". Si la nomenclature se chevauche, elle a tendance à être comptée comme un mot. Cependant, par exemple, "réincarnation du monde différent" est une nomenclature complexe, mais je veux que ce soit un mot. Les mesures à caractère général semblent être assez difficiles.

Compréhension implicite

Je pense qu'il ne serait pas étrange que différents mondes et filles méchantes aient des chiffres plus accablants. Comme ceux-ci ont leurs propres éléments de réglage et catégories, il semble qu'ils ne soient pas simplement décrits dans le titre ou le synopsis. Il semble que les étiquettes, etc. doivent être pondérées séparément, puis traitées de manière complexe.

2. Y a-t-il une corrélation entre la similitude entre le titre et le synopsis et la popularité?

C'est douloureux à dire sans faire un graphique clair, mais je n'ai pas semblé trouver beaucoup de corrélation.

Si vous suivez la tendance,

"title": "L'ami d'enfance de Kensei m'a frappé violemment avec le harcèlement de puissance, alors j'ai décidé d'isoler et de recommencer à la frontière.", "daily_point": 5468, "score": 0.9695894

Titres au format de phrase tels que calculés avec une grande similitude,

"title": "Different World Cooking Road", "daily_point": 574, "score": 0.44519746

Les titres de nomenclature à l'ancienne, tels que, sont calculés pour avoir une faible similitude.

Si vous regardez la distribution des scores, il existe de nombreux nombres avec une forte similitude, donc Il semble être vrai qu'il existe de nombreux titres de style phrase qui ont une sensation de roman léger. Cependant, avec cela seul, je ne sais pas s'il s'agit d'un format de phrase donc il y en a beaucoup dans le haut, ou simplement parce qu'il est populaire et qu'il n'y a que beaucoup de populations.

Afin d'apporter des corrections, la similitude est calculée pour les résultats triés par date et heure de comptabilisation, et comparée au coefficient. Si elle est similaire à cette distribution de similarité, elle reflète simplement la population. Si le ratio de formats de phrases est faible dans cette distribution, il semble que les formats de phrases ont une forte capacité de lecture.

Cependant, le calcul de similitude était à l'origine une enquête sur le type de synopsis qui serait populaire. Après avoir mené des recherches supplémentaires, je ne pouvais pas arriver à une conclusion sur ce qu'il fallait faire du synopsis, alors j'ai terminé ici. (La question de savoir ce que devrait être le titre est une faible priorité personnellement)

Impressions d'utilisation

Facile à utiliser, mais difficile à voir les erreurs

Parce qu'il fonctionne avec le code de test répertorié ci-dessus. C'est très facile. Quiconque peut frapper curl peut l'utiliser en quelques secondes, il semble donc assez facile à utiliser.

En revanche, il est difficile de comprendre la réponse lorsqu'une erreur se produit. Il y a un problème avec le jeton d'accès, il y a trop de caractères, J'obtiens une erreur pour une autre raison. Le statut de la réponse et la granularité du message sont assez grossiers, donc Il était assez difficile d'identifier la cause à partir de là.

Il semble que l'utilisation se développera en se combinant avec d'autres API

Comme certains l'ont utilisé pour résumer l'Aozora Bunko, J'ai pensé qu'il montrerait sa vraie valeur lorsqu'il est utilisé en combinaison avec d'autres services.

Par exemple, en combinant la reconnaissance vocale et l'estimation des attributs utilisateur, Il semble que les attributs des humains séjournant dans un espace spécifique puissent être automatiquement collectés. Installez-le dans un restaurant, estimez les attributs du client, Cette zone augmentera le stock de menus supérieurs, etc. (Il semble qu'il brûlera en raison de problèmes de confidentialité)

Conclusion

Je veux un iPad.

Recommended Posts

Essayez d'extraire les mots-clés populaires dans COTOHA
Essayez Cython dans les plus brefs délais
Essayez de déchiffrer les données de connexion stockées dans Firefox
[Jinja2] Solution au problème que les variables ajoutées dans l'instruction for ne sont pas héritées
[Django] Essayons de clarifier la partie de Django qui était en quelque sorte à travers le test
Une solution au problème que les fichiers contenant [et] ne sont pas répertoriés dans glob.glob ()
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Pour vérifier si la clé spécifiée se trouve dans le compartiment spécifié dans Boto 3
Extraire l'index de la set list d'origine correspondant à la liste des sous-ensembles.
Expressions régulières faciles et solides à apprendre en Python
Téléchargez et gérez les packages qui ne sont pas dans conda sur anaconda.org
Comment définir intelligemment les objets couramment utilisés dans View
Essayez de modéliser le rendement cumulatif du roulement dans le trading à terme
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Programmation pour combattre dans le monde ~ 5-1
Programmation pour combattre dans le monde ~ 5-5,5-6
Programmer pour combattre dans le monde 5-3
Programmation pour combattre dans le monde - Chapitre 4
Dans la commande python, python pointe vers python3.8
Essayez d'introduire le thème sur Pelican
Essayez de mettre des données dans MongoDB
Le moyen le plus rapide d'essayer EfficientNet
Programmation pour combattre dans le monde ~ 5-2
La façon la plus simple d'essayer PyQtGraph
J'ai essayé de résumer les méthodes qui sont souvent utilisées lors de l'implémentation d'algo de base dans Quantx Factory
Mémorandum Expression régulière Lorsqu'il y a plusieurs caractères que vous souhaitez séparer dans la chaîne de caractères
Déploiement Heroku de la première application Django à laquelle les débutants sont accros
Utiliser des fonctionnalités qui ne sont plus visibles sur l'interface utilisateur de Slack
Comment supprimer des pages dont l'accès est refusé dans Selenium + Headless Chrome
Essayez de vous connecter à qiita avec Python
Essayez d'utiliser l'API Wunderlist en Python
[Python] Utilisez des pandas pour extraire △△ qui maximise ○○
Essayez d'utiliser l'API Kraken avec Python
Essayez d'utiliser la bande HL dans l'ordre
Essayez de faire face à la somme partielle
Essayez de reproduire l'add.at de NumPy avec Julia
Comment extraire une zone de polygone en Python
Dans Jupyter, ajoutez IPerl au noyau.
J'ai essayé de toucher l'API COTOHA
10 erreurs Python communes aux débutants
Python amateur tente de résumer la liste ①
Essayez le nouveau chaînage du planificateur dans PyTorch 1.4
Divers commentaires à écrire dans le programme
[Note] Termes difficiles à retenir
Essayez d'accéder à l'API Spotify dans Django.
Je veux visualiser où et combien de personnes se trouvent dans l'usine
Collection de conseils Numpy, Pandas souvent utilisés sur le terrain
Gérez CSV avec l'élément que vous souhaitez analyser dans le nom du fichier
Essayez d'ajouter un module externe au poivre. Pour le moment, en demandes.
J'ai essayé de résumer les opérations susceptibles d'être utilisées avec numpy-stl
Essayez d'afficher la séquence de Fibonacci dans différentes langues comme pratique d'algorithme
Utilisez PIL en Python pour extraire uniquement les données souhaitées d'Exif
Solution au problème que vous ne pouvez pas activer en mettant conda dans pyenv
Comment trouver le coefficient de la courbe approximative passant par les sommets en Python