Проверить код языка для языков Викимедиа

У меня есть сценарий оболочки, который использует службу запросов Викиданных (WDQS) для получения необходимых данных. Запрос SPARQL, запускающий WDQS, принимает код языка входных параметров.

Есть ли способ, которым я могу проверить в сценарии оболочки, является ли код входного языка допустимым кодом языка Викимедиа в качестве данных первого столбца в ссылке ниже https://www.wikidata.org/wiki/Help:Wikimedia_language_codes/lists/all


person Sasidhar    schedule 12.01.2018    source источник
comment
Не могли бы вы поделиться тем, что представляет собой данный ввод строки -- или я просто что-то упустил? Вы говорите о форматах /etc/locale.gen? (например, fo_FO.UTF-8 UTF-8)? Если да, то if grep -q "$input" /etc/locale.gen; then printf "valid locale\n"; else printf "locale not found\n"; fi   -  person David C. Rankin    schedule 13.01.2018
comment
Большое спасибо. Это то, что я хотел.   -  person Sasidhar    schedule 13.01.2018
comment
Это показывает, что даже слепая белка время от времени находит орех. Это было качающееся догадка о том, что вам нужно. Рад, что это помогло.   -  person David C. Rankin    schedule 13.01.2018
comment
@DavidC.Rankin Я изменил вопрос, потому что предыдущий вопрос выглядит общим и простым.   -  person Sasidhar    schedule 13.01.2018
comment
@DavidC.Rankin, языковые коды Викимедиа отличаются от кодов ISO 639 (которые используются в locale.gen AFAIK).   -  person Stanislav Kralin    schedule 14.01.2018
comment
У wiki.bitplan.com/index.php/SPARQL#WikiMedia_Languages есть запрос код ISO + код страны Викимедиа + количество говорящих, которые могут дать вам другую точку зрения.   -  person Wolfgang Fahl    schedule 15.01.2018


Ответы (1)


Эти коды являются возможными значениями wdt:P424. Из предложения по недвижимости:

— Есть ли большая разница с ISO 639-1?
— Многие из них такие же, как ISO, но они не выполняются последовательно. Некоторые языковые коды состоят из двух букв, некоторых из трех, а некоторых даже больше. И есть также несколько случаев, когда это совершенно другое (также: ISO: тоск албанский, Викимедиа: алеманнский).

Вы можете получить все эти коды, используя следующий простой запрос SPARQL:

SELECT DISTINCT ?code { [] wdt:P424 ?code } ORDER BY ?code

Попробуйте!

На самом деле список, на который вы ссылаетесь, периодически генерируется ботом. Полный запрос :

SELECT ?item ?c
(CONCAT("{","{#language:",?c,"}","}") as ?display)
(CONCAT("{","{#language:",?c,"|","en}","}") as ?displayEN)
(CONCAT("{","{#language:",?c,"|","fr}","}") as ?displayFR)
{
  ?item wdt:P424 ?c .
  MINUS{?item wdt:P31/wdt:P279* wd:Q14827288} #--exclude Wikimedia projects
  MINUS{?item wdt:P31/wdt:P279* wd:Q17442446} #--exclude Wikimedia internal stuff
}

Ты мог:

  • вставьте список допустимых кодов в свой скрипт, или
  • предварительно загружать список при запуске скрипта, или
  • выполнять запрос ASK SPARQL при каждом вводе пользователя.

Я бы предпочел третий вариант:

#!/bin/sh
echo "Enter language code:"
read code
request="curl -g -s https://query.wikidata.org/sparql?query=ASK{?lang%20wdt:P424%20\"$code\"}"

if $request | grep -q "true"; then
    echo "Valid code";
else 
    echo "Invalid code";
fi
person Stanislav Kralin    schedule 13.01.2018