Added unsiq.ac.id
This commit is contained in:
parent
63ddf889be
commit
32fdeca2c7
@ -1,28 +0,0 @@
|
||||
package swot
|
||||
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* @author max
|
||||
*/
|
||||
|
||||
object CompilationState {
|
||||
val stoplist = File("lib/domains/stoplist.txt").readLines().toHashSet()
|
||||
val domains = File("lib/domains/tlds.txt").readLines().toHashSet()
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val root = File("lib/domains")
|
||||
root.walkTopDown().forEach {
|
||||
if (it.isFile) {
|
||||
val parts = it.toRelativeString(root).replace('\\', '/').removeSuffix(".txt").split('/').toList()
|
||||
if (!checkSet(CompilationState.stoplist, parts) && !checkSet(CompilationState.domains, parts)) {
|
||||
CompilationState.domains.add(parts.reversed().joinToString("."))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val stoplist = CompilationState.stoplist.map { "-$it" }.sorted().joinToString("\n")
|
||||
File("out/artifacts").mkdirs()
|
||||
File("out/artifacts/swot.txt").writeText(stoplist + "\n" + CompilationState.domains.sorted().joinToString("\n"))
|
||||
}
|
||||
@ -1,56 +0,0 @@
|
||||
package swot
|
||||
|
||||
import java.io.File
|
||||
|
||||
fun isAcademic(email: String): Boolean {
|
||||
val parts = domainParts(email)
|
||||
return !isStoplisted(parts) && (isUnderTLD(parts) || findSchoolNames(parts).isNotEmpty())
|
||||
}
|
||||
|
||||
fun findSchoolNames(emailOrDomain: String): List<String> {
|
||||
return findSchoolNames(domainParts(emailOrDomain))
|
||||
}
|
||||
|
||||
fun isUnderTLD(parts: List<String>): Boolean {
|
||||
return checkSet(Resources.tlds, parts)
|
||||
}
|
||||
|
||||
fun isStoplisted(parts: List<String>): Boolean {
|
||||
return checkSet(Resources.stoplist, parts)
|
||||
}
|
||||
|
||||
private object Resources {
|
||||
val tlds = readList("/tlds.txt") ?: error("Cannot find /tlds.txt")
|
||||
val stoplist = readList("/stoplist.txt") ?: error("Cannot find /stoplist.txt")
|
||||
|
||||
fun readList(resource: String) : Set<String>? {
|
||||
return File("lib/domains/$resource").takeIf { it.exists() }?.bufferedReader()?.lineSequence()?.toHashSet()
|
||||
}
|
||||
}
|
||||
|
||||
private fun findSchoolNames(parts: List<String>): List<String> {
|
||||
val resourcePath = StringBuilder("")
|
||||
for (part in parts) {
|
||||
resourcePath.append('/').append(part)
|
||||
val school = Resources.readList("${resourcePath}.txt")
|
||||
if (school != null) {
|
||||
return school.toList()
|
||||
}
|
||||
}
|
||||
|
||||
return arrayListOf()
|
||||
}
|
||||
|
||||
private fun domainParts(emailOrDomain: String): List<String> {
|
||||
return emailOrDomain.trim().toLowerCase().substringAfter('@').substringAfter("://").substringBefore(':').split('.').reversed()
|
||||
}
|
||||
|
||||
internal fun checkSet(set: Set<String>, parts: List<String>): Boolean {
|
||||
val subj = StringBuilder()
|
||||
for (part in parts) {
|
||||
subj.insert(0, part)
|
||||
if (set.contains(subj.toString())) return true
|
||||
subj.insert(0 ,'.')
|
||||
}
|
||||
return false
|
||||
}
|
||||
@ -1,59 +0,0 @@
|
||||
package swot
|
||||
|
||||
import junit.framework.TestCase
|
||||
|
||||
class SwotTest : TestCase() {
|
||||
fun testSwot() {
|
||||
assertEquals (true , isAcademic("lreilly@stanford.edu"))
|
||||
assertEquals (true , isAcademic("LREILLY@STANFORD.EDU"))
|
||||
assertEquals (true , isAcademic("Lreilly@Stanford.Edu"))
|
||||
assertEquals (true , isAcademic("lreilly@slac.stanford.edu"))
|
||||
assertEquals (true , isAcademic("lreilly@strath.ac.uk"))
|
||||
assertEquals (true , isAcademic("lreilly@soft-eng.strath.ac.uk"))
|
||||
assertEquals (true , isAcademic("lee@ugr.es"))
|
||||
assertEquals (true , isAcademic("lee@uottawa.ca"))
|
||||
assertEquals (true , isAcademic("lee@ucy.ac.cy"))
|
||||
assertEquals (false , isAcademic("lee@mother.edu.ru"))
|
||||
assertEquals (false, isAcademic("lee@leerilly.net"))
|
||||
assertEquals (false, isAcademic("lee@gmail.com"))
|
||||
assertEquals (false, isAcademic("lee@stanford.edu.com"))
|
||||
assertEquals (false, isAcademic("lee@strath.ac.uk.com"))
|
||||
assertEquals (true , isAcademic("stanford.edu"))
|
||||
assertEquals (true , isAcademic("slac.stanford.edu"))
|
||||
assertEquals (true , isAcademic("www.stanford.edu"))
|
||||
assertEquals (true , isAcademic("http://www.stanford.edu"))
|
||||
assertEquals (true , isAcademic("http://www.stanford.edu:9393"))
|
||||
assertEquals (true , isAcademic("strath.ac.uk"))
|
||||
assertEquals (true , isAcademic("soft-eng.strath.ac.uk"))
|
||||
assertEquals (true , isAcademic("ugr.es"))
|
||||
assertEquals (true , isAcademic("uottawa.ca"))
|
||||
assertEquals (true , isAcademic("ucy.ac.cy"))
|
||||
assertEquals (false , isAcademic("mother.edu.ru"))
|
||||
assertEquals (false, isAcademic("leerilly.net"))
|
||||
assertEquals (false, isAcademic("gmail.com"))
|
||||
assertEquals (false, isAcademic("stanford.edu.com"))
|
||||
assertEquals (false, isAcademic("strath.ac.uk.com"))
|
||||
assertEquals (false, isAcademic(""))
|
||||
assertEquals (false, isAcademic("the"))
|
||||
assertEquals (true , isAcademic(" stanford.edu"))
|
||||
assertEquals (true , isAcademic("lee@strath.ac.uk "))
|
||||
assertEquals (false, isAcademic(" gmail.com "))
|
||||
assertEquals (true , isAcademic("lee@stud.uni-corvinus.hu"))
|
||||
assertEquals (true , isAcademic("lee@harvard.edu"))
|
||||
assertEquals (true , isAcademic("lee@mail.harvard.edu"))
|
||||
|
||||
assertEquals(false, isAcademic("imposter@si.edu"))
|
||||
assertEquals(false, isAcademic("lee@mdu.edu.rs"))
|
||||
|
||||
// Iran sanctions are lifted
|
||||
assertEquals(true, isAcademic("lee@acmt.ac.ir"))
|
||||
}
|
||||
|
||||
fun testSchoolNames() {
|
||||
assertTrue(findSchoolNames("lreilly@cs.strath.ac.uk").contains("University of Strathclyde"))
|
||||
assertTrue(findSchoolNames("lreilly@cs.strath.ac.uk").contains("uka tarsadia university,bardoli"))
|
||||
assertEquals("BRG Fadingerstraße Linz, Austria", findSchoolNames("lreilly@fadi.at").single())
|
||||
assertEquals("St. Petersburg State University", findSchoolNames("max@spbu.ru ").single())
|
||||
assertEquals(0, findSchoolNames("foo@shop.com").size)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user