Android&Kotlin solutions📱
2 subscribers
70 photos
18 videos
50 files
380 links
Android bo'yicha savol javoblar
Download Telegram
Forwarded from Хабр
Как разработчик вышел на $400 тысяч в месяц на AI-сервисе для написания эссе

Разбираем, как разработчик вывел свой простой сервис для написания эссе в топ Google, несмотря на кучу конкурентов, монетизировал продукт по подписке $30 в месяц и вышел на доход более чем $400 тысяч в месяц.
Grokaem_Algoritmi_iIllystrirovanoe_posobie_dlia_programmsitov_2017
Forwarded from my work schedule
login: bazarkbot@gmail.com
password: Zaybat_ok_09.
implementation 'com.github.pedroSG94.rtmp-rtsp-stream-client-java:rtplibrary:2.2.8'
Qdiruv tizimi algoritmi:
data class Page(val url: String, val title: String, val content: String)

fun tokenize(text: String): List<String> {
return text.lowercase()
.split("\\W+".toRegex()) // So‘zlar
.filter { it.length > 2 } // Juda qisqa so‘zlarni olib tashlaymiz
}

fun computeTF(words: List<String>): Map<String, Double> {
val tf = mutableMapOf<String, Double>()
val totalWords = words.size.toDouble()
words.groupingBy { it }.eachCount().forEach { (word, count) ->
tf[word] = count / totalWords
}
return tf
}

fun computeIDF(pages: List<Page>): Map<String, Double> {
val docCount = pages.size.toDouble()
val wordDocFreq = mutableMapOf<String, Int>()

for (page in pages) {
val uniqueWords = tokenize(page.content).toSet()
for (word in uniqueWords) {
wordDocFreq[word] = wordDocFreq.getOrDefault(word, 0) + 1
}
}

return wordDocFreq.mapValues { (_, df) -> Math.log(docCount / (1 + df)) }
}

fun computeTFIDF(tf: Map<String, Double>, idf: Map<String, Double>): Map<String, Double> {
return tf.mapValues { (word, tfValue) ->
tfValue * (idf[word] ?: 0.0)
}
}


fun cosineSimilarity(v1: Map<String, Double>, v2: Map<String, Double>): Double {
val commonWords = v1.keys.intersect(v2.keys)

val numerator = commonWords.sumOf { v1[it]!! * v2[it]!! }

val denominator = Math.sqrt(v1.values.sumOf { it * it }) * Math.sqrt(v2.values.sumOf { it * it })

return if (denominator == 0.0) 0.0 else numerator / denominator
}

fun searchAdvanced(pages: List<Page>, query: String): List<Pair<Page, Double>> {
val idf = computeIDF(pages)

val queryWords = tokenize(query)
val queryTF = computeTF(queryWords)
val queryTFIDF = computeTFIDF(queryTF, idf)

val results = mutableListOf<Pair<Page, Double>>()

for (page in pages) {
val words = tokenize(page.content)
val tf = computeTF(words)
val tfidf = computeTFIDF(tf, idf)

val similarity = cosineSimilarity(queryTFIDF, tfidf)
if (similarity > 0.0) {
results.add(page to similarity)
}
}

return results.sortedByDescending { it.second } // eng moslar yuqorida
}